ggplot2-结合了geom_point和geom_line的图例

时间:2019-03-17 19:58:36

标签: r ggplot2 legend

给我一​​个数据集,我想将一个变量绘制为点,将另一个变量绘制为具有不同线型的线(每个变量都有不同的颜色)。

 a <- c(10:20)
 df <- data.frame(a=a,b=a,c=a*a/10,d=10*sqrt(a))
 df_melt <- reshape2::melt(df,id.vars='a')

 ggplot(df_melt, aes(x=a,y=value,colour=variable,linetype=variable,shape=variable))+
           geom_line(data=subset(df_melt,variable == "b"))+
           geom_line(data=subset(df_melt,variable == "c"))+
           geom_point(data=subset(df_melt,variable == "d"))

现在将生成所需的图:

enter image description here

但是,图例现在显示了所有三个变量的线型和形状,尽管并非所有变量实际都显示它们。

如何相应地删除线型或形状以使图例与绘图显示保持一致?

1 个答案:

答案 0 :(得分:3)

通常,如果您发现自己添加了具有不同子集的多个geom_line()geom_point()层-通常,有一种更好的方法涉及直接操作变量。在这里,我通过在应该丢失的点或线(在NAscale_linetype_manual()中)分别为点或线添加scale_shape_manual()值来做到这一点。 (使用的形状/线型与上面使用的形状/线型不完全相同,但是很容易进行调整。)

ggplot(df_melt, aes(x=a,y=value,colour=variable,
                    linetype=variable,shape=variable))+
    geom_point()+
    geom_line()+
    scale_linetype_manual(values=c(1,2,NA))+
    scale_shape_manual(values=c(NA,NA,2))