假设我有以下数据框:
df1 = data.frame(c11 = c(1:5), c12 = c(1:5))
df2 = data.frame(c21 = c(1:5), c22 = (c(1:5))^0.5)
df3 = data.frame(c31 = c(1:5), c32 = (c(1:5))^2)
我想在相同的情节/面板中将这些绘制为线条 . 我可以做到这一点
p <- ggplot() + geom_line(data=df1, aes(x=c11, y = c12)) +
geom_line(data=df2, aes(x=c21,y=c22)) +
geom_line(data=df3, aes(x=c31, c32))
所有这些都是黑色的 . 如果我想要它们的颜色不同,我可以明确地将颜色指定为 geom_line()
的参数 . 我的问题是我可以指定几种颜色的列表,比如5种颜色,例如红色,蓝色,绿色,橙色,灰色,并使用该列表,这样我就不必明确指定颜色作为geom_line的参数()如果是每一行 . 如果图 p
包含2个geom_line()语句,则它们将分别为红色和蓝色着色 . 如果它包含3个geom_line语句,它将为红色,蓝色和绿色着色 . 最后,如何为这些图指定图例 . 即使我可以在 p
的末尾将颜色作为矢量给出,这将是很棒的 . 如果问题不明确,请告诉我 .
谢谢 .
3 回答
如果您使用包含不同列的熔化data.frame来指定不同的美学,ggplot2效果最佳 . 常见的列名称更容易融化,所以我从那里开始 . 以下是我要采取的步骤:
重命名列
融化了数据,这些数据增加了我们将映射到颜色美学的新变量
定义您的颜色矢量
使用scale_colour_manual指定适当的比例
“
Edited for clarity
newData
的结构:情节本身:
如果你按照
ggplot2
接近图形的方式调整思路,这些问题就会变得更容易解决 .ggplot2
围绕着这样的想法进行组织:图中出现的所有内容(原则上)应该作为数据框中的列存在 . (当然也有例外,但这是一般的想法 . )因此,您尝试逐个构建此图形,一次一行,每个来自不同的数据帧,然后为它们分配颜色非常不合适 . 如果你想用不同的颜色标记图表中的东西,你首先要考虑的是:
在这种情况下,解决方案非常简单 . 只需
rbind
您的三个数据框(您需要确保首先匹配组合名称)并创建一个新列,例如grp
,其中有三个级别对应于您的三个数据框:然后将变量
grp
映射到ggplot调用中的美学颜色:最后,如果您不喜欢默认颜色,可以使用
scale_colour_manual
指定自己的颜色:或者你可以使用
scale_colour_brewer
中的一些漂亮的'pre-chosen'调色板 .编辑:我修正了上面的拼写错误,以确保
grp
是一个因素 . 这是我的最终版本:你不必融化,聚集或聚集 . 它非常简单 . 只需将颜色添加到geom_line即可