如何使用ggplot2仅修改单个图例项的符号?
解决方案
要单独修改图例中某个项的符号,核心是通过guide_legend()的override.aes参数自定义每个图例项的形状,同时保持颜色和符号在同一个图例中。
修改后的完整代码如下:
library(ggplot2) library(ggtext) scatter <- ggplot(data) + geom_point(aes(x=Period, y=y1, colour="prevalence"), size=4) + geom_segment(data = CIinfo, aes(x=Period, y=LowerCI, xend=Period, yend=UpperCI, colour="estimated probability and 95%CI"), size=2, lineend = "round", alpha=0.7, show.legend = FALSE) + geom_point(aes(x=Period, y=y2, colour="median prevalence"), size=3) + geom_point(aes(x=Period, y=y3, colour="estimated probability and 95%CI"), size=4, shape=18) + # 图中的点用菱形 theme_minimal() + scale_color_manual(values = c("#d2d2d2","#365C8DFF","#EB6529FF"), breaks = c("prevalence","median prevalence","estimated probability and 95%CI"), labels = ~ stringr::str_wrap(.x, width = 28)) + labs(x = "Time Period", title ="Estimated Probability and Prevalence Rates") + theme(plot.title = element_textbox(hjust = 0.5, margin = margin(b = 15)), plot.title.position = "plot", axis.title.x = element_text(margin = margin(t = 10, r = 0, b = 0, l = 0)), axis.title.y = element_blank(), axis.text = element_text(face="bold"), panel.grid.minor.x = element_blank(), legend.title = element_blank(), legend.spacing.y = unit(8, "pt") ) + # 关键:通过override.aes指定每个图例项的形状 guides(colour = guide_legend(byrow = TRUE, override.aes = list(shape = c(16, 16, 18)))) + # 前两个保持圆形,第三个用菱形 scale_y_continuous(labels = scales::percent, limits = c(0, .5)) scatter
关键说明:
override.aes = list(shape = c(16, 16, 18)):按照breaks的顺序,分别设置三个图例项的形状。其中shape=18是实心菱形,如果你需要带横线的菱形(中间有一横的样式),可以替换为shape=22(填充菱形带边框)或者其他符合需求的形状编号。- 保持
colour映射统一,避免将形状单独映射导致图例拆分,这样既可以单独修改目标符号,又能维持图例的整体性。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

