如何为ggplot2中连续size变量自定义图例以显示全部尺寸值
解决ggplot2中Size图例未显示全部数值的问题
问题场景
按Size和Shape分组绘制散点图,用颜色区分Shape类别、点的相对大小区分Size变量,但生成的图表里Size图例未包含所有Size数值,需要自定义图例显示全部尺寸值。现有代码如下:
TMC_vs_SSA <- ggplot(surface_area, aes(x= specific_surface_area, y=TMC, color =Shape, size=Size))+ theme_bw()+ geom_point(alpha= 0.80)+ scale_shape_manual(values = c(15,20,17,18,19,5,3,11,13))+ scale_color_brewer(palette="Paired")+ scale_y_log10(breaks=c(.001,0.01,1,100,10000,1000000,100000000, 10000000000,1000000000000, 100000000000000,10000000000000000, 1000000000000000000), minor_breaks= minor_breaks) + scale_x_log10(breaks=c(.001,0.01,1,100,10000,1000000,100000000, 10000000000,1000000000000, 100000000000000,10000000000000000, 1000000000000000000, 100000000000000000000), minor_breaks = minor_breaks) TMC_SSA_plot<- TMC_vs_SSA + xlab('Specific Surface Area (µm^2/g)')+ ylab('TMC (#/L)')+ #ggtitle('Threshold microplastics concentration curve') theme(axis.text=element_text(size = 11), axis.title = element_text(size = 12), legend.title = element_text(size = 12), legend.text = element_text(size = 11)) TMC_SSA_plot <- TMC_SSA_plot + theme(legend.position = "right")
解决方案
通过指定scale_size_*()函数的breaks参数,强制图例显示所有Size数值:
判断Size变量类型:
- 若Size是离散型变量,使用
scale_size_discrete() - 若Size是连续型变量但需要显示所有存在的数值,使用
scale_size_continuous()
- 若Size是离散型变量,使用
修改代码:
在现有代码的scale_color_brewer()之后添加以下代码(二选一):# 离散型Size变量 scale_size_discrete(breaks = unique(surface_area$Size), labels = unique(surface_area$Size))或者
# 连续型Size变量(range可选,控制点的尺寸范围) scale_size_continuous(breaks = unique(surface_area$Size), labels = unique(surface_area$Size), range = c(2, 8))其中:
unique(surface_area$Size)提取数据中所有不重复的Size值,作为图例的刻度断点range参数用来控制点的最小和最大尺寸,比如c(2,8)表示最小点大小为2,最大为8
完整修改后代码示例:
TMC_vs_SSA <- ggplot(surface_area, aes(x= specific_surface_area, y=TMC, color =Shape, size=Size))+ theme_bw()+ geom_point(alpha= 0.80)+ scale_shape_manual(values = c(15,20,17,18,19,5,3,11,13))+ scale_color_brewer(palette="Paired")+ # 添加自定义Size图例 scale_size_discrete(breaks = unique(surface_area$Size), labels = unique(surface_area$Size))+ scale_y_log10(breaks=c(.001,0.01,1,100,10000,1000000,100000000, 10000000000,1000000000000, 100000000000000,10000000000000000, 1000000000000000000), minor_breaks= minor_breaks) + scale_x_log10(breaks=c(.001,0.01,1,100,10000,1000000,100000000, 10000000000,1000000000000, 100000000000000,10000000000000000, 1000000000000000000, 100000000000000000000), minor_breaks = minor_breaks) TMC_SSA_plot<- TMC_vs_SSA + xlab('Specific Surface Area (µm^2/g)')+ ylab('TMC (#/L)')+ #ggtitle('Threshold microplastics concentration curve') theme(axis.text=element_text(size = 11), axis.title = element_text(size = 12), legend.title = element_text(size = 12), legend.text = element_text(size = 11)) TMC_SSA_plot <- TMC_SSA_plot + theme(legend.position = "right")
修改后,Size图例将显示数据中所有的尺寸数值。
内容的提问来源于stack exchange,提问作者Omar
相关产品推荐
相关产品推荐

