给我一个数据集,我想将一个变量绘制为点,将另一个变量绘制为具有不同线型的线(每个变量都有不同的颜色)。
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"))
现在将生成所需的图:
但是,图例现在显示了所有三个变量的线型和形状,尽管并非所有变量实际都显示它们。
如何相应地删除线型或形状以使图例与绘图显示保持一致?
答案 0 :(得分:3)
通常,如果您发现自己添加了具有不同子集的多个geom_line()
或geom_point()
层-通常,有一种更好的方法涉及直接操作变量。在这里,我通过在应该丢失的点或线(在NA
或scale_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))