ggplot2箱线图添加3条参考线正常,加2条不显示是什么原因?
问题原因
你构造参考线数据集时列的循环填充逻辑出现了错位:
- 3条参考线时,参考值共有3个,x向量长度为6(每2个点对应1条线),R自动循环填充短列后,每个参考值对应的两个点的x刚好是
-Inf和Inf,可以连成水平线 - 2条参考线时,参考值共有2个,x向量长度为4,循环填充后每个参考值对应的两个点的x都是相同的(要么都是
-Inf、要么都是Inf),两个点完全重合自然画不出线。
修正方法
你只需要调整参考线数据集的构造逻辑,让同一条参考线的y值和分类标签明确重复2次即可:
ex_double_plot <- function(data){ # 修正后的参考线数据集,同一条线的y和标签重复2次 References <- data.frame( x = c(-Inf, Inf, -Inf, Inf), y = c(60, 60, 40, 40), References = factor(c("High", "High", "Low", "Low"))) ggplot(data, aes(x = event, y = x)) + geom_boxplot(outlier.shape = NA) + geom_jitter(alpha=0.6) + geom_line(aes( x, y, color = References), References) + scale_color_manual(values=c("red", "red")) } ex_double_plot(ex)
更优方案
画水平参考线无需手动构造连线数据集,直接使用geom_hline更简洁,也不会出现上述错位问题:
ex_double_plot_simple <- function(data){ ggplot(data, aes(x = event, y = x)) + geom_boxplot(outlier.shape = NA) + geom_jitter(alpha=0.6) + # 直接添加两条水平参考线 geom_hline(yintercept = c(60,40), color="red") } ex_double_plot_simple(ex)
内容的提问来源于stack exchange,提问作者Mackson Ncube
相关产品推荐
相关产品推荐

