情节两个不同的数据帧,由一个或多个变量图例

问题描述:

考虑下面的示例数据帧进行分组,不同的标签:情节两个不同的数据帧,由一个或多个变量图例

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绘制他们,我得到一个自动的传说,这是伟大的。然而,传说是两个dataframes一样的,这是没有那么大:

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行×10列,另一个有〜90行×30列),因此将它们合并在一起并不会很简单。

一个简单的替代方法是使用不同的形状为,其可以使用fill点并设置colorNA(由此得到相同的结果作为默认点):

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

+0

其实,在真实数据集,两个'groups'变量具有相同的名称,而不是比'groups1'和'groups2':我创建测试用例时不够细心这里(我认为这不重要!)。无论如何,即使在这种情况下,你的第二个解决方案似乎也能工作我实际上需要绘制第二个数据集的点。我认为添加一个'geom_point'图层就足够了...... – DeltaIV

+0

哇!解决方案1现在看起来很棒非常感谢 :) – DeltaIV

一般来说,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