如何修改ggplot散点图中单个数据点的形状与大小?
解决ggplot散点图中特定数据点的形状与大小自定义问题
要实现只修改"Our Company"数据点的形状和大小,核心是把shape和size属性绑定到Company分组变量,再通过手动刻度指定不同分组的样式,而非直接给geom_point设置全局参数。
以下是修改后的完整代码:
library(tidyverse) df <- data.frame(School_ID = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), Score = c( 20, 23, 33, 40, 19, 36, 50, 49, 33, 10), Company = c("Other","Other", "Other", "Other", "Other", "Other", "Other", "Other", "Other", "Our Company")) df %>% ggplot(aes(reorder(School_ID, -Score), Score, colour = Company, shape = Company, # 新增:将形状与Company分组绑定 size = Company)) + # 新增:将大小与Company分组绑定 geom_point() + # 移除全局size参数,改为映射控制 labs(x = "Companies", y = "Score") + scale_color_manual(name = "", labels = c("Other companies", "Our company"), values = c("#21908CFF", "#440154FF")) + scale_shape_manual(name = "", # 手动指定各分组的形状 labels = c("Other companies", "Our company"), values = c(16, 17)) + # 16为实心圆,17为实心三角 scale_size_manual(name = "", # 手动指定各分组的点大小 labels = c("Other companies", "Our company"), values = c(4, 6)) + # 其他点大小4,目标点大小6 theme(axis.ticks.x = element_blank(), axis.text.x = element_blank(), panel.grid = element_blank()) + guides(color = guide_legend(override.aes = list(size = 6)), # 统一图例点大小 shape = guide_legend(override.aes = list(size = 6)), size = guide_legend(override.aes = list(size = 6)))
关键改动说明:
- 属性映射:在
ggplot()的aes中添加shape = Company和size = Company,让样式属性随分组动态变化,替代全局统一设置。 - 手动刻度配置:用
scale_shape_manual指定不同分组的形状码,用scale_size_manual设置对应点的大小。 - 图例优化:通过
guides()统一图例中点的显示大小,避免图例样式不一致。 - 冗余代码清理:删除无用的
scale_fill_manual(geom_point用color控制颜色,fill仅对带填充的形状生效)。
内容的提问来源于stack exchange,提问作者Stats Iliterate
相关产品推荐
相关产品推荐

