R语言使用fitdistrplus绘图时如何自动避免图例被裁剪
解决fitdistrplus绘图图例遮挡问题的自动方法
你遇到的图例遮挡问题是因为fitdistrplus的系列对比图默认将图例放在绘图区右上角,子图空间较小时就会和曲线重叠,有以下几种全自动的解决方法:
- 方法1:使用函数内置的
legendpos参数调整位置
这是最简便的方案,denscomp/qqcomp/cdfcomp/ppcomp均原生支持该参数,既可以手动指定"topleft"/"bottomright"等常规位置,也可以传入"auto"让函数自动识别绘图区内的空白区域放置图例,适配性更强。
修改后的代码示例:
library(fitdistrplus) # 你的拟合代码(可删除重复的fg定义行,不影响运行) fg <- fitdist(my_data$adjusted_weight, "gamma") fln <- fitdist(my_data$adjusted_weight, "lnorm") fw <- fitdist(my_data$adjusted_weight, "weibull") par(mfrow = c(2, 2)) plot.legend <- c("Weibull", "lognormal", "gamma") # 每个绘图函数添加legendpos参数,auto为自动找空白位置 denscomp(list(fw, fln, fg), legendtext = plot.legend, legendpos = "auto") qqcomp(list(fw, fln, fg), legendtext = plot.legend, legendpos = "auto") cdfcomp(list(fw, fln, fg), legendtext = plot.legend, legendpos = "auto") ppcomp(list(fw, fln, fg), legendtext = plot.legend, legendpos = "auto")
- 方法2:将图例放置在子图外部
如果绘图区内容较多没有空白位置放图例,可以调整子图边距,把图例放在绘图区外,完全不会遮挡内容:
library(fitdistrplus) fg <- fitdist(my_data$adjusted_weight, "gamma") fln <- fitdist(my_data$adjusted_weight, "lnorm") fw <- fitdist(my_data$adjusted_weight, "weibull") # 调整子图边距,右侧留出额外空间放图例 par(mfrow = c(2, 2), mar = c(4,4,2,7), xpd = TRUE) plot.legend <- c("Weibull", "lognormal", "gamma") # 图例放在子图右侧外部 denscomp(list(fw, fln, fg), legendtext = plot.legend, legendpos = "right") qqcomp(list(fw, fln, fg), legendtext = plot.legend, legendpos = "right") cdfcomp(list(fw, fln, fg), legendtext = plot.legend, legendpos = "right") ppcomp(list(fw, fln, fg), legendtext = plot.legend, legendpos = "right")
- 方法3:整幅图使用统一图例
如果不需要每个子图都显示重复的图例,可以只在整幅图的边缘放一个公共图例,最大化子图的绘图空间:
library(fitdistrplus) fg <- fitdist(my_data$adjusted_weight, "gamma") fln <- fitdist(my_data$adjusted_weight, "lnorm") fw <- fitdist(my_data$adjusted_weight, "weibull") # 调整整图外边距,右侧留出放图例的空间 par(mfrow = c(2, 2), oma = c(0,0,0,7), xpd = NA) plot.legend <- c("Weibull", "lognormal", "gamma") # 绘图时不显示子图图例 denscomp(list(fw, fln, fg), legendtext = NULL) qqcomp(list(fw, fln, fg), legendtext = NULL) cdfcomp(list(fw, fln, fg), legendtext = NULL) ppcomp(list(fw, fln, fg), legendtext = NULL) # 在整图右侧添加统一图例,颜色匹配函数默认的绘图配色 legend("topright", inset = c(-0.3, 0), legend = plot.legend, col = c("red", "blue", "green"), lwd = 2, bty = "n")
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

