5

以下示例代码根据 的值生成彩色点图a

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]

(以上颜色代码为彩色圆点)。

4

2 回答 2

8

您可以cut()使用函数将级别保存为单独的变量levels()。使用功能gsub(),您可以替换,-和。然后在函数中提供图例的位置,用作标签的变量,将在图例中使用相同的 10 种颜色并制作实心点。([legend()cutscol=rbPal(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)

在此处输入图像描述

于 2013-04-05T07:27:51.487 回答
2

如果你想产生你描述的确切图例,你可以使用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)

这会给:

在此处输入图像描述

我建议您看一下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()

在此处输入图像描述

于 2013-04-05T07:30:45.260 回答