2013-04-05 43 views
4

以下示例代碼產生顏色根據a值點圖:顏色和範圍添加圖例中的R

a <- sample(1:100) 
rbPal <- colorRampPalette(c('red','blue')) 
b <- rbPal(10)[as.numeric(cut(a,breaks = 10))] 
plot(a,col=b,pch=16) 

我想添加指示說明該曲線圖,其值的範圍顏色指的是。 類似於:

"#C60038" - [20.7 - 30.7] 
"#5500AA" - [60.4 - 70.3] 

(上面的顏色代碼是彩色點)。

回答

7

您可以保存cut()水平獨立變量,函數levels()。隨着功能gsub()你可以-([取代,。然後,在功能legend()提供圖例的位置,可變cuts使用作標記,col=rbPal(10)將使用相同的10種顏色中說明和pch=16將使填充點。

cuts<-levels(cut(a,breaks = 10)) 
cuts<-gsub(","," - ",cuts) 
cuts<-gsub("\\(","[",cuts) 
cuts 
[1] "[0.901 - 10.8]" "[10.8 - 20.7]" "[20.7 - 30.7]" "[30.7 - 40.6]" "[40.6 - 50.5]" "[50.5 - 60.4]" "[60.4 - 70.3]" 
[8] "[70.3 - 80.3]" "[80.3 - 90.2]" "[90.2 - 100]" 
plot(a,col=b,pch=16) 
legend("top",cuts,col=rbPal(10),pch=16) 

enter image description here

+0

我已經成功地做到這一點,但我真的不喜歡的格式這麼多。我想用方括號和'-'代替逗號。任何想法? – g256 2013-04-05 07:43:09

+1

@ g256更新了我的答案來解決這個問題 – 2013-04-05 07:49:00

+0

沒想過使用'gsub'。非常感謝。 – g256 2013-04-05 08:05:05

1

如果你想製作你所描述的確切的傳說,你可以使用legend這樣:

a <- sample(1:100) 
rbPal <- colorRampPalette(c('red','blue')) 
b <- rbPal(10)[as.numeric(cut(a,breaks = 10))] 
plot(a,col=b,pch=16) 
legend('topright', legend=c("[20.7 - 30.7]", "[60.4 - 70.3]"), col=c("#C60038","#5500AA"), pch=16) 

這將使:

enter image description here

我會推薦你要看看ggplot2,它允許產生巨大的圖形,同時自動創建的傳說,例如:

x <- sample(1:100) 
y <- sample(1:100) 
fact <- runif(100) 
df <- data.frame(x,y,fact) 
ggplot(data=df, aes(x=x,y=y,col=fact)) + geom_point() 

enter image description here