使用ggplot绘图时无法显示图例的技术求助
ggplot图例不显示的解决方法
你的代码里,color参数是直接写在geom_line()外面的固定值,这种写法不会让ggplot生成图例——只有当颜色映射到数据中的分类变量(也就是放在aes()括号内)时,ggplot才会自动创建图例。下面给两种可行的解决办法:
方法一:合并数据集(推荐,代码更简洁)
先把三个数据集合并,添加一个分组列来区分不同数据来源,再将该列映射到颜色:
library(dplyr) # 合并数据集并添加分组标识 combined_data <- bind_rows( Sandusky8 %>% mutate(组别 = "Sandusky8"), SanduskyA %>% mutate(组别 = "SanduskyA"), SanduskyB %>% mutate(组别 = "SanduskyB") ) # 绘制图表 Plot0 <- ggplot(combined_data, aes(x=ProperDateTime, y=TKN, color=组别)) + geom_line() + scale_x_datetime(date_labels = "%Y") + # 手动指定各组对应的颜色 scale_color_manual(values = c("Sandusky8" = "grey54", "SanduskyA" = "blue", "SanduskyB" = "red")) + labs(title="桑达斯基河1974-2023年凯氏总氮含量", x="年份", y="TKN (mg/L)") + theme(legend.position = "right") Plot0
方法二:不合并数据集,在每个geom里映射颜色
如果不想合并数据,可以在每个geom_line()的aes()里指定颜色为对应的分组名称,再手动设置颜色映射:
Plot0 <- ggplot() + geom_line(data=Sandusky8, aes(x=ProperDateTime, y=TKN, color="Sandusky8")) + geom_line(data=SanduskyA, aes(x=ProperDateTime, y=TKN, color="SanduskyA")) + geom_line(data=SanduskyB, aes(x=ProperDateTime, y=TKN, color="SanduskyB")) + scale_x_datetime(date_labels = "%Y") + scale_color_manual(values = c("Sandusky8" = "grey54", "SanduskyA" = "blue", "SanduskyB" = "red")) + labs(title="桑达斯基河1974-2023年凯氏总氮含量", x="年份", y="TKN (mg/L)") + theme(legend.position = "right") Plot0
两种方法的核心都是让颜色成为一个映射变量,而不是固定值,这样ggplot就能识别出需要生成图例的分类,配合scale_color_manual还能精准控制每个分类的颜色。
内容的提问来源于stack exchange,提问作者Alexandra Ferkul
相关产品推荐
相关产品推荐

