假设我有以下数据框:
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)
Run Code Online (Sandbox Code Playgroud)
我想在相同的情节/面板中将这些绘制为线条.我可以做到这一点
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))
Run Code Online (Sandbox Code Playgroud)
所有这些都是黑色的.如果我想要它们的颜色不同,我可以明确指定颜色作为参数geom_line()
.我的问题是我可以指定几种颜色的列表,比如5种颜色,例如红色,蓝色,绿色,橙色,灰色,并使用该列表,这样我就不必明确指定颜色作为geom_line的参数()如果是每一行.如果绘图p
包含2个geom_line()语句,则它们将分别为红色和蓝色着色.如果它包含3个geom_line语句,它将为红色,蓝色和绿色着色.最后,如何为这些图指定图例.即使我可以在最后给出颜色作为矢量p
也很棒.如果问题不明确,请告诉我.
谢谢.
Cha*_*ase 13
如果您使用包含不同列的熔化data.frame来指定不同的美学,ggplot2效果最佳.常见的列名称更容易融化,所以我从那里开始.以下是我要采取的步骤:
"
names(df1) <- c("x", "y")
names(df2) <- c("x", "y")
names(df3) <- c("x", "y")
newData <- melt(list(df1 = df1, df2 = df2, df3 = df3), id.vars = "x")
#Specify your colour vector
cols <- c("red", "blue", "green", "orange", "gray")
#Plot data and specify the manual scale
ggplot(newData, aes(x, value, colour = L1)) +
geom_line() +
scale_colour_manual(values = cols)
Run Code Online (Sandbox Code Playgroud)
编辑清晰
结构newData
:
'data.frame': 15 obs. of 4 variables:
$ x : int 1 2 3 4 5 1 2 3 4 5 ...
$ variable: Factor w/ 1 level "y": 1 1 1 1 1 1 1 1 1 1 ...
$ value : num 1 2 3 4 5 ...
$ L1 : chr "df1" "df1" "df1" "df1" ...
Run Code Online (Sandbox Code Playgroud)
情节本身:
你不必融化、分组或聚集。它很简单。只需将颜色添加到 geom_line
library(tidyverse)
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), color= "red") +
geom_line(data=df2, aes(x=c21,y=c22), color = "blue") +
geom_line(data=df3, aes(x=c31, c32), color = "green")
p
Run Code Online (Sandbox Code Playgroud)
如果您将思维调整为ggplot2
接近图形的方式,这些类型的问题将变得更容易解决。ggplot2
围绕这样的想法进行组织:图形中出现的所有内容(原则上)都应作为一列存在于数据框中。(当然也有例外,但这是一般的想法。)
因此,您一次又一次地构建此图的尝试非常困难,这种尝试是一次一次创建的,每行来自不同的数据帧,然后为其分配颜色ggplot2
。如果要在图形中用不同的颜色标记事物,则首先应该想到的是:
如何将该颜色标签信息编码为变量?
在这种情况下,解决方案非常简单。只需rbind
将三个数据框放在一起(您需要确保首名匹配)并创建一个新列,说它grp
具有与三个数据框相对应的三个级别:
dat <- rbind(df1,df2,df3)
dat$grp <- rep(factor(1:3),times = c(nrow(df1),nrow(df2),nrow(df3)))
Run Code Online (Sandbox Code Playgroud)
然后在ggplot调用中将变量映射到美观的颜色: grp
ggplot(data = dat, aes(x=...,y=...,colour = grp) +
geom_line()
Run Code Online (Sandbox Code Playgroud)
最后,如果您不喜欢默认颜色,则可以使用scale_colour_manual
以下命令指定自己的颜色:
+ scale_colour_manual(value = c('green','blue','grey'))
Run Code Online (Sandbox Code Playgroud)
或者您可以使用来自的一些不错的“预选”调色板scale_colour_brewer
。
编辑:我固定上面的错字,以确保这grp
是一个因素。这是我的最终版本:
df1 = data.frame(c1 = c(1:5), c2 = c(1:5))
df2 = data.frame(c1 = c(1:5), c2 = (c(1:5))^0.5)
df3 = data.frame(c1 = c(1:5), c2 = (c(1:5))^2)
dat <- rbind(df1,df2,df3)
dat$grp <- rep(factor(1:3),times=c(nrow(df1),nrow(df2),nrow(df3)))
ggplot(data = dat, aes(x = c1, y = c2, colour = grp)) +
geom_line()
Run Code Online (Sandbox Code Playgroud)