2013-02-13 10 views
52

Ich bin ziemlich neu in R, und ich habe die folgenden Abfragen:Plot mehr Zeilen (Datenreihe), das jeweils mit einzigartiger Farbe in R

Ich versuche, ein Grundstück in R zu erzeugen, die mehrere Zeilen (Datenreihe) hat . Jede dieser Linien ist eine Kategorie und ich möchte, dass sie eine einzigartige Farbe hat.

Derzeit ist mein Code-Setup auf diese Weise:

Erstens bin ich ein leeres Grundstück zu schaffen:

plot(1,type='n',xlim=c(1,10),ylim=c(0,max_y),xlab='ID', ylab='Frequency') 

Dann gilt für jede meiner Kategorie, ich bin Linien in dieser leere Grundstück mit einem Plotten "für" Schleife wie folgt:

Es gibt 8 Kategorien hier, und so werden 8 Zeilen in der Handlung produziert. Wie Sie sehen können, versuche ich eine Farbe aus der Rainbows() Funktion zu probieren, um für jede Linie eine Farbe zu erzeugen.

Allerdings, wenn das Diagramm generiert wird, finde ich, dass es mehrere Linien gibt, die die gleiche Farbe haben. Zum Beispiel haben 3 dieser 8 Zeilen eine grüne Farbe.

Wie kann ich jede dieser 8 Linien eine einzigartige Farbe haben?

Auch, wie reflektiere ich diese Einzigartigkeit in der Legende der Handlung? Ich habe versucht, die legend() Funktion nachzuschlagen, aber es war nicht klar, welchen Parameter ich verwenden sollte, um diese einzigartige Farbe für jede Kategorie widerzuspiegeln?

Jede Hilfe oder Vorschläge würden sehr geschätzt werden.

+2

Möglicherweise möchten Sie col = Kategorie ändern, dann sehen Sie möglicherweise die verschiedenen Farben für jede Serie. Können Sie uns Beispieldaten zur Verfügung stellen? ggplot2 kann hierfür eine einfachere Option sein. –

Antwort

41

Wenn Sie eine ggplot2 Lösung haben möchten, können Sie dies tun, wenn Sie Ihre Daten in diesem Format gestalten können (siehe Beispiel unten)

# dummy data 
set.seed(45) 
df <- data.frame(x=rep(1:5, 9), val=sample(1:100, 45), 
        variable=rep(paste0("category", 1:9), each=5)) 
# plot 
ggplot(data = df, aes(x=x, y=val)) + geom_line(aes(colour=variable)) 

ggplot2_geom_line

21

Sie haben das Recht allgemeine Strategie zu tun Dies wurde mit Hilfe von Basisgrafiken durchgeführt, aber wie bereits erwähnt, geben Sie R im Wesentlichen vor, eine zufällige Farbe aus einer Menge von 10 für jede Zeile auszuwählen. Angesichts dessen ist es nicht überraschend, dass Sie gelegentlich zwei Linien mit der gleichen Farbe erhalten. Hier ist ein Beispiel unter Verwendung von Basis Grafik:

plot(0,0,xlim = c(-10,10),ylim = c(-10,10),type = "n") 

cl <- rainbow(5) 

for (i in 1:5){ 
    lines(-10:10,runif(21,-10,10),col = cl[i],type = 'b') 
} 

enter image description here

Beachten Sie die Verwendung von type = "n" zu unterdrücken, alle in dem ursprünglichen Aufruf Plottet das Fenster und die Indizierung von cl innerhalb der for-Schleife einzurichten.

+0

(Imo) eine tolle Lösung für Anfänger in R :) –

58

Wenn Ihre Daten in wide formatmatplot wird dafür gemacht und oft vergessen zu:

dat <- matrix(runif(40,1,20),ncol=4) # make data 
matplot(dat, type = c("b"),pch=1,col = 1:4) #plot 
legend("topleft", legend = 1:4, col=1:4, pch=1) # optional legend 

Es gibt auch den zusätzlichen Bonus für diejenigen, die nicht mit Dingen wie ggplot dass die meisten der Plotten Paramter wie pch etc sind die gleichen matplot() wie plot(). enter image description here

+1

Vielen Dank für das Aufzeigen! – SirRichie

7

@Arun Dummy-Daten verwenden :) hier eine lattice Lösung:

xyplot(val~x,type=c('l','p'),groups= variable,data=df,auto.key=T) 

enter image description here

1

Hier ist ein Beispielcode, der eine Legende enthält, wenn das von Interesse ist.

# First create an empty plot. 
plot(1, type = 'n', xlim = c(xminp, xmaxp), ylim = c(0, 1), 
    xlab = "log transformed coverage", ylab = "frequency") 

# Create a list of 22 colors to use for the lines. 
cl <- rainbow(22) 

# Now fill plot with the log transformed coverage data from the 
# files one by one. 
for(i in 1:length(data)) { 
    lines(density(log(data[[i]]$coverage)), col = cl[i]) 
    plotcol[i] <- cl[i] 
} 
legend("topright", legend = c(list.files()), col = plotcol, lwd = 1, 
     cex = 0.5) 
2

Ich weiß, seine alten ein Beitrag zu beantworten, aber wie ich auf der Suche nach der gleichen Post kam, jemand anderes könnte hier drehen als auch

Durch Zugabe: Farbe in ggplot Funktion, konnte ich erreichen, die Linien mit verschiedenen Farben in Bezug auf die Gruppe in der Handlung.

ggplot(data=Set6, aes(x=Semana, y=Net_Sales_in_pesos, group = Agencia_ID, colour = as.factor(Agencia_ID)))  

und

geom_line() 

Line Graph with Multiple colors

3

mehr als einer Zeile kann durch Verwendung der Funktion lines()

# Create the data for the chart. 
v <- c(7,12,28,3,41) 
t <- c(14,7,6,19,3) 

# Give the chart file a name. 
png(file = "line_chart_2_lines.jpg") 

# Plot the bar chart. 
plot(v,type = "o",col = "red", xlab = "Month", ylab = "Rain fall", 
    main = "Rain fall chart") 

lines(t, type = "o", col = "blue") 

# Save the file. 
dev.off() 

OUTPUT enter image description here

auf dem gleichen Diagramm gezeichnet