2017-05-09 48 views
0

奇怪的是,我找不到任何東西在線來解決我遇到的問題。geom_line組和scale_color_manual產生意外錯誤

生成數據:

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)) 

這個數據幀的頭部看起來像:

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 

健全檢查:

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

現在,所有我想要做的是情節,這些4條線與各種對比顏色;即,我不希望以下內容:

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

Bad Contrast Between Lines

在上面的圖中,傳說是可怕的,行有可怕的對比。爲什麼這麼難?所以,我試過如下:

> 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 

這將產生:

Error: Continuous value supplied to discrete scale 

我怎麼能告訴ggplot只是給我各種各樣的顏色,並將其應用到每一行(由group=gp標記)?

回答

2

您的分組變量(「gp」)屬於數字類型,因此ggplot2將一組離散的值分配給一個連續變量的難度較大。如果您將「gp」重新分配爲字符或因子,則可以像上面那樣手動調整顏色。

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

如果你想離開你的分組變量「GP」的數字,那麼你可以使用「scale_colour_gradient」來代替,並指定顏色的書擋到擴大你的路線。

### 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

好極了!謝謝! –

+0

不是問題!很高興幫助 –