ggplot如何修改不同数据集的线条颜色并正确生成图例
正确实现代码
你只需要在aes内完成颜色变量的映射后,通过scale_color_manual()指定映射值对应的自定义颜色即可,完整可运行代码如下:
library(ggplot2) df1 = data.frame(c11 = c(1:5), c12 = c(1:5)) df2 = data.frame(c21 = c(1:5), c22 = (c(1:5))^0.5) ggplot() + geom_line(data=df1, aes(x=c11, y = c12, color= "DF1")) + geom_line(data=df2, aes(x=c21,y=c22, color= "DF2")) + scale_color_manual(values = c("DF1" = "red", "DF2" = "blue"))
原理解释
- 当你把
color参数写在aes()外部时,属于直接指定图层的固定样式,不会被ggplot纳入图形属性映射体系,因此不会生成图例 - 当你把
color = "字符串"写在aes()内部时,相当于为该图层创建了一个分类值为对应字符串的颜色映射变量,ggplot会自动将这些分类值关联到默认色板,同时生成图例 scale_color_manual()的values参数接收一个命名向量,向量的名称对应你在aes()里设置的分类字符串,值就是你想要的自定义颜色,就能同时满足自定义颜色+显示图例的需求
更推荐的写法(长数据集格式)
ggplot原生更推荐单数据源+分组映射的写法,你可以先把两个数据集合并后再绘图,代码更整洁,后续维护也更方便:
# 合并数据集,新增分组标识列 df_combined <- rbind( data.frame(x = df1$c11, y = df1$c12, group = "DF1"), data.frame(x = df2$c21, y = df2$c22, group = "DF2") ) ggplot(df_combined, aes(x = x, y = y, color = group)) + geom_line() + scale_color_manual(values = c("DF1" = "red", "DF2" = "blue"))
内容的提问来源于stack exchange,提问作者Gonzalo de Quesada
相关产品推荐
相关产品推荐

