2013-04-05 109 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