Scatterplot mit Farbe Gruppen - base-R-plot
Ich habe ein einfaches Streudiagramm
x<-rnorm(100)
y<-rnorm(100)
z<-rnorm(100)
Ich möchte plot der plot(x,y)
aber die Farbe der Punkte sollte farblich codiert basierend auf z
.
Ich möchte auch die Möglichkeit haben, zu definieren, wie viele Gruppen (und somit Farben) z
haben sollte. Und dass diese Gruppierung sollte resistent gegen Ausreißer (vielleicht teilen die z
Dichte in n
gleicher Dichte Gruppen).
Bis jetzt mache ich das manuell, gibt es eine Möglichkeit, dies automatisch?
Hinweis: möchte ich dies mit base R nicht mit ggplot
.
InformationsquelleAutor ECII | 2011-12-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie ein Vektor von Farben für die
col
parameter, so ist es nur eine Frage der Definition Ihrerz
Gruppen in einer Weise, die Sinn macht für Ihre Anwendung. Es ist diecut()
Funktion in der Basis, odercut2()
im Hmisc bietet ein wenig mehr Flexibilität. Zur Unterstützung in der Kommissionierung angemessenen Farbpaletten, die RColorBrewer Paket ist von unschätzbarem Wert. Hier ist ein schnelles Beispiel nach der Definitionx,y,z
:Sie können natürlich fügen Sie eine
legend
manuell. Leider, ich glaube nicht, dass alle Arten von plots akzeptieren Vektoren für diecol
argument, abertype = "p"
offensichtlich funktioniert. Zum Beispielplot(x,y, type = "l", col = as.character(z.cols))
kommt als eine einzelne Farbe für mich. Für diese Grundstücke können Sie verschiedene Farben mitlines()
odersegments()
oder was auch immer die low-level Plotten Befehl, den Sie verwenden müssen, ist. Siehe die Antwort von @Andrie, dies zu tun mittype = "l"
Grundstücke in der Basis-Grafik -hier.nicht standardmäßig.
Hmisc:::cut2()
bietet diem
- argument legt die minimale Anzahl von Beobachtungen in jeder Gruppe macht dies jedoch. So etwas wiez.cols2 <- cut2(z, m = length(z) / 3)
sollte den trick tun.Sollte nicht die g-argument in cut2 besser sein? cut2(z, g=3) ?
Als seitliche Anmerkung: wenn Sie möchten, um Ihre Farben auf der Basis der y-Werte, die offensichtlich gerade setzen y statt z in die
cut
tools.wahrscheinlich 6 in einem, 1/2 Dutzend, in den anderen...habe ich immer verwendet, die
m
argument vor, aber du hast Recht, dassg
ist wohl eher treffend geeignet für diese Aufgabe. Vielen Dank für das heads-up!InformationsquelleAutor Chase