ggplot图例无法正确显示自定义线型问题求助
问题原因
你的场景下三个美学属性(颜色、大小、线型)都映射到了model变量,ggplot2会自动合并三者的图例。默认图例键的宽度较窄,加上你设置的实线线条较粗,虚线的间隙在有限宽度内被挤压不可见,就会出现图例全为实线的错觉,画布上因为线条长度足够所以能正常显示。
修复代码
ggplot(respplot_new, aes(x=expl.val,y=pred.val,color=model))+ geom_line(aes(size=model,linetype=model)) + scale_linetype_manual(values = c("RF" = "solid", "GBM" = "solid", "MAXENT" = "solid", "MARS" = "solid", "GAM" = "solid", "GLM"="dashed", "ANN"="dashed", "FDA"="dashed","CTA"="dashed","SRE"="dashed"))+ scale_size_manual(values = c("RF" = 1.8, "GBM" = 1.8, "MAXENT" = 1.8, "MARS" = 1.8, "GAM" = 1.8, "GLM"=1.1, "ANN"=1.1, "FDA"=1.1,"CTA"=1.1,"SRE"=1.1))+ facet_grid(~expl.name,scales="free")+ theme_bw() + # 新增部分:调整图例键宽度,给虚线留出显示空间 guides( color = guide_legend(keywidth = 3), size = guide_legend(keywidth = 3), linetype = guide_legend(keywidth = 3) )
补充说明
- 原代码
facet_grid(~respplot_new$expl.name)的写法不规范,直接使用列名expl.name即可,ggplot会自动从传入的数据集读取对应字段,避免跨环境引用报错。 - 如果你需要进一步调整虚线显示效果,也可以在
scale_linetype_manual里用自定义线型编码(比如"dashed"换成"22",代表2像素实线+2像素间隙),适配不同的图例宽度需求。
内容的提问来源于stack exchange,提问作者Beardedant
相关产品推荐
相关产品推荐

