绘制两个不同的数据框,按一个或多个变量分组,在图例中使用不同的标签

时间:2016-02-12 11:12:10

标签: r plot ggplot2

考虑以下示例数据框:

x1=seq(2,7,length.out=13)
y1a=1.5*x1+4; y2a=1.5*x1+7;y3a=1.5*x1+9;
X1=rep(x1,3)
Y1=c(y1a,y2a,y3a)
groups1=rep(c("A","B","C"),each=13)
df1=data.frame(groups1,X1,Y1)

x2=seq(4,10,length=10)
y1b=3*x2+4; y2b=3*x2+7;y3b=3*x2+9;
X2=rep(x2,3)
Y2=c(y1b,y2b,y3b)
groups2=rep(c("A","B","C"),each=10)
df2=data.frame(groups2,X2,Y2)

ggplot2绘制它们,我得到一个自动传奇,这很棒。但是,两个数据帧的图例都是相同的,这不是很好:

p <- ggplot()
p <- p + geom_line(data=df1,aes(x=X1, y=Y1, color = groups1)) +
     geom_point(data=df2,aes(x=X2, y=Y2, color = groups2))

enter image description here

相反,我希望图例区分来自df1的曲线和来自df2的曲线,标记前者的“Pred”和后者的“Test”。我怎样才能做到这一点?请注意,实际数据帧要大得多且非常不同(一个有~400行x10列,另一个有~90行x30列),因此将它们合并在一起并不简单。

2 个答案:

答案 0 :(得分:4)

一个简单的替代方法是为您可以使用fill的点使用不同的形状,并将color设置为NA(从而获得与默认点相同的结果):

ggplot() + 
  geom_line(data=df1,aes(x=X1, y=Y1, color = groups1)) +
  geom_point(data=df2,aes(x=X2, y=Y2, fill = groups2), shape=21, color=NA) +
  scale_color_discrete("Pred") +
  scale_fill_discrete("Test")

给出:

enter image description here

另一种可能性是为不同的数据集使用不同的线型:

ggplot() + 
  geom_line(data=df1,aes(x=X1, y=Y1, color = groups1, linetype = "Pred")) +
  geom_line(data=df2,aes(x=X2, y=Y2, color = groups2, linetype = "Test")) +
  scale_color_discrete("Groups") +
  scale_linetype_discrete("Datasets")

给出:

enter image description here

答案 1 :(得分:2)

一般来说,ggplot只为一件事做了一个传奇。你不能有两个颜色传说。

您可以使用交互为每个主要组和每个子组使用不同的颜色。

df1$group <- 1
df2$group <- 2


p <- ggplot() + geom_line(data=df1,aes(x=X1, y=Y1, color = interaction(group,groups1))) +
  geom_point(data=df2,aes(x=X2, y=Y2, color = interaction(group,groups2)))
p

enter image description here