ggplot2图例问题排查:修改图例名称与调整分类显示顺序
ggplot2 图例调整解决方案
修正后完整代码
raw_dat <- read.csv("./animals.csv") ggplot(raw_dat, aes(x=years, y=number, color=type, group=type)) + geom_errorbar(aes(ymin=low, ymax=high), width=.1) + geom_line() + geom_point(aes(x=years,y=number,shape=type, color=type), size=2) + # 增加limits参数指定分类顺序,保留原有配色规则 scale_color_manual(values = c("total" = "blue", "cat" = "red", "dog" = "green"), limits = c("total", "cat", "dog")) + # 同步设置形状映射的分类顺序,避免图例拆分 scale_shape_manual(values= c("total" = 0, "cat" = 2, "dog" = 3), limits = c("total", "cat", "dog")) + # 统一颜色、形状映射的图例名称,自动合并为同一个图例 labs(shape = "Animal", color = "Animal") + xlab("Time (years)") + ylab("Number") + scale_y_continuous(breaks=0:350*50) + scale_x_continuous(breaks=0:16*1) + theme_bw()
修改说明
- 需求a实现:原代码错误保留了
shape = "type"、color = "type"的设置,新增的无效name="Animal"参数不会生效。因为你给type列同时绑定了颜色、形状两种映射,只要把两个映射的标签都统一设置为"Animal",就会自动合并为同一个图例,完全不需要修改源数据的列名。 - 需求b实现:在
scale_color_manual和scale_shape_manual两个函数中新增limits参数,直接指定分类排序为c("total", "cat", "dog")即可,会同步匹配绘图顺序和图例展示顺序,不需要修改源数据的因子水平。
内容的提问来源于stack exchange,提问作者gemma
相关产品推荐
相关产品推荐

