2017-05-09 2 views
0

Seltsamerweise kann ich nichts online finden, um dieses Problem zu lösen, das ich habe.geom_line Gruppen und scale_color_manual Produzieren Unerwarteter Fehler

Generieren von Daten:

rm(list = ls()) 
library(ggplot2) 
X <- as.numeric(1:100) 
df <- data.frame(x=X,y=rnorm(n=100,sd=.1)+sin(X*pi/200),gp=1) 
for (i in 2:4) df <- rbind(df,data.frame(x=X,y=rnorm(n = 100,sd = .1)+sin(X*i*pi/200),gp=i)) 

Der Kopf dieses Datenrahmen wie folgt aussieht:

x   y gp 
1 1 0.030678982 1 
2 2 0.108093934 1 
3 3 0.067512201 1 
4 4 0.186648638 1 
5 5 0.109397764 1 
6 6 -0.005158247 1 

Plausibiltätsprüfung:

> unique(df$gp) 
[1] 1 2 3 4 

Nun, alles, was ich tun möchte, ist Plot dieses 4 Linien mit verschiedenen kontrastierenden Farben; das heißt, ich mag nicht, folgend:

> p <- ggplot(data = df,aes(x=x,y=y,group=gp,color=gp))+geom_line()+theme_bw() 
> p 

Bad Contrast Between Lines

In der obigen Handlung, ist die Legende horrend und die Linien haben eine schrecklichen Kontrast. Warum ist das so schwer? Also versuchte ich folgendes:

> p <- ggplot(data = df,aes(x=x,y=y,group=gp,color=gp))+geom_line()+theme_bw()+scale_color_manual(values = c('red','blue','green','black')) 
> p 

, die ergibt:

Error: Continuous value supplied to discrete scale 

Wie kann ich ggplot sagen, gib mir nur eine große Auswahl an Farben und sie auf jede Zeile (gekennzeichnet durch group=gp)?

Antwort

2

Ihre Gruppierungsvariable ("gp") gehört zur Klasse Numerisch, sodass es für ggplot2 schwierig ist, einer kontinuierlichen Variablen eine diskrete Menge von Werten zuzuweisen. Wenn Sie "gp" als Zeichen oder Faktor neu zuweisen, können Sie die Farben wie oben manuell anpassen.

rm(list = ls()) 
library(ggplot2) 
X <- as.numeric(1:100) 
df <- data.frame(x=X,y=rnorm(n=100,sd=.1)+sin(X*pi/200),gp=1) 
for (i in 2:4) df <- rbind(df,data.frame(x=X,y=rnorm(n = 100,sd = .1)+sin(X*i*pi/200),gp=i)) 

### Classify as character ### 
df$gp <- as.character(df$gp) 

### Plot ### 
p <- ggplot(data = df,aes(x=x,y=y,group=gp,color=gp)) + 
    geom_line() + 
    theme_bw() 
plot(p) 

enter image description here

### Manually adjust discrete colors ### 
p <- p + 
    scale_colour_manual(values = c("red", "blue", "green", "black")) 
plot(p) 

enter image description here

Wenn Sie Ihre Gruppenvariable "gp" in numerischer verlassen wollte, dann könnte man 'scale_colour_gradient' statt und geben Sie die bookends der Farben verwenden, um skaliere deine Linien.

### Reclassify as numeriC### 
df$gp <- as.numeric(df$gp) 

### Plot ### 
p <- ggplot(data = df,aes(x=x,y=y,group=gp,color=gp)) + 
    geom_line() + 
    theme_bw() + 
    scale_color_gradient(low = "red", high = "blue") 
plot(p) 

enter image description here

+0

Excellent! Vielen Dank! –

+0

Kein Problem! Froh, dass es geholfen hat –