我得到了一个数据集,想将一个变量绘制为点,将其他变量绘制为具有不同线型(每个变量具有不同颜色)的线。
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"))
Run Code Online (Sandbox Code Playgroud)
这现在产生了想要的情节:
然而,图例现在显示所有三个变量的线型和形状,尽管并非所有变量都实际显示它们。
如何相应地删除线型或形状以使图例与绘图显示一致?
通常,如果您发现自己添加了多个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))
Run Code Online (Sandbox Code Playgroud)