2016-06-29 9 views
0

Ich versuche, mit R eine Reihe von 120 Zahlen zu plotten, wo die ersten 40 sind von einem Typ, die nächsten 40 Elemente sind von einem zweiten Typ und die letzten 40 Elemente sind von einem dritten Typ.In R, wie kann ich verschiedene Farben für jeden Bereich in meinem Streudiagramm verwenden?

Im Moment bin Plotten ich es nur als Punktwolke und seine schwer auseinander, die drei Abschnitte zu sagen:

data <- read.table("mydata.txt") 
plot(data[,1]) 

what I have

Gibt es eine Möglichkeit, die drei Abschnitte zu unterscheiden, wie in diesem folgenden Modell, das ich gemacht habe?

what I want

+1

Erster Schritt:. Haben Sie eine Variable, die einen eindeutigen Wert enthält pro Gruppe? Zum Beispiel: 'data $ colindex = rep (1: 3, jeder = 40)'? –

+0

Im Moment nicht und Dinge sind implizit durch Index definiert. Es ist jedoch in Ordnung, zusätzliche Spalten zu meinen Daten hinzuzufügen, wenn dies die Dinge vereinfachen wird. – hugomg

+0

Sie benötigen das, um eine Palette von Farben zu indizieren, wie die, die von 'rainbow' in Mark antwort zur Verfügung gestellt wird. Sie können Ihre eigene Palette erstellen: col = c ("rot", "grün", "blau") [data $ colindex] '(googeln Sie nach 'R liste von Farbennamen' oder sehen Sie sich' rgb' an 'ggplot' Paket und Framework, Sie werden sehen, dass die Durchführung einer Gruppen-farbigen Streudiagramm ist einfach, vgl http://docs.ggplot2.org/0.9.3.1/geom_point.html –

Antwort

3

Sie könnten einen Farbvektor liefern, wenn die Daten bereits bestellt werden.

mydata <- runif(120) 
plot(mydata, col = rep(rainbow(3), each = 40)) 

rainbow(3) macht einen Farbvektor von 3 Farben und rep mit each = 40 macht 40 Kopien von jedem.

+0

Könnte diese Antwort an den Fall angepasst werden, wo jede Gruppe unterschiedliche Beträge hat? Zum Beispiel 30,40,50 statt 40,40,40? – hugomg

+0

Ich denke, Sie könnten 'Regenbogen machen (3) [c (rep (1, 30), rep (2, 40), rep (3, 50))] "Aber das ist ziemlich hässlich. Wie Eric oben bemerkt hat, ist ein Vektor, der die Abschnitte beschreibt, der beste um zu gehen. –

-1

Ein längerer nicht so schön beantworten wie die von Mark O'Connell aber das Verdienst, flexibler zu sein hat (ich glaube)

data<-data.frame(y=seq(1,1000)+rnorm(1000,0,100),index=seq(1,1000)) 

data.blue<-data[data$index<200,] 
data.green<-data[data$index>=200&data$index<400, ] 
data.red<-data[data$index>=400&data$index<600, ] 
data.purple<-data[data$index>=600&data$index<1000, ] 

plot(data.blue,col='blue',xlim=c(-200,1300),ylim=c(0,1000)) 
points(data.green$index,data.green$y,col='green') 
points(data.red$index,data.red$y,col='red') 
points(data.purple$index,data.purple$y,col='purple') 
+0

Warum doppelte Daten, wenn es nicht sinnvoll ist? Wenn Sie Schnittpunkte ausnutzen möchten, verwenden Sie einfach die Funktion "Ausschneiden". –

Verwandte Themen