如何移除ggplot2生成图表中的size图例标签
问题原因
多余的size图例出现,是因为你将固定常量size = 3写在了aes()映射函数内部。ggplot2的默认逻辑是为aes()中声明的所有视觉属性生成对应图例,哪怕你传入的是固定值而非数据列映射。
解决方案
推荐优先使用第一种写法,符合ggplot2的语法规范:
- 方法1:将固定大小参数移出
aes(),作为geom_point()的独立参数传入。固定视觉属性不需要放在数据映射层内。
修正后的完整可运行代码:
p_cd = c(0.01,0.15,0.5,0.7,0.9) p_cr = c(0.01,0.15,0.5,0.7,0.9) data = as.data.frame(expand.grid(p_cd,p_cr)) data = cbind(data,rep(NA,dim(data)[1])) colnames(data) = c('p_cd','p_cr','weights') weights = runif(sum(seq(1,4,by=1)),0,5) u = 1 for(i in 1:dim(data)[1]){ if(data[i,1]>data[i,2]){ data[i,3] = weights[u] u = u + 1 } } library(ggplot2) ggplot(data[!is.na(data[,3]),], aes(x=p_cd, y=p_cr, color=weights)) + geom_point(size = 3)
- 方法2:如果特殊场景下需要保留
aes()内的size参数,可以通过guides()函数手动关闭size对应的图例:
ggplot(data[!is.na(data[,3]),], aes(x=p_cd, y=p_cr, color=weights, size = 3)) + geom_point() + guides(size = "none")
语法提示:只有需要和数据框列做映射的视觉属性,才需要放在
aes()内部,给固定值的属性(比如固定点大小、固定线条类型)直接写在对应geom层的参数中即可,能避免很多意外的图例和显示问题。
内容的提问来源于stack exchange,提问作者Jonathan1234
相关产品推荐
相关产品推荐

