如何使用 ggplot 缩短带有箭头的长误差线?

Posted

技术标签:

【中文标题】如何使用 ggplot 缩短带有箭头的长误差线?【英文标题】:How do I shorten a long error bar with an arrow using ggplot? 【发布时间】:2021-11-06 09:28:53 【问题描述】:

我制作了以下图表:

如您所见,由于误差线较长,结果不是很清楚。因此,我想剪掉长错误栏并用箭头替换,如下所示:

但是,我无法使用 ggplot 将箭头放在正确的位置。基于类似的问题,我生成了以下代码:

p <- ggplot(dat, aes(x=exposure, y=OR, ymin=LCI, ymax=UCI,col=method)) + 
  geom_linerange(position=position_dodge(width = 0.5)) +
  geom_hline(yintercept=1, lty=2) +
  geom_point(stroke = 0.5,position=position_dodge(width = 0.5)) +
  scale_x_discrete(name="Exposure") +
  scale_y_continuous(name="Odds ratio (95% CI)") +
  coord_flip() +
  scale_colour_manual(values=c("#D55E00","#009E73", "#56B4E9","#E69F00")) + 
  theme_bw() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),text = element_text(size=11),legend.position="none") + 
  geom_segment(aes(x = 1, y = 14, xend = 1, yend = 14), size=0.25,
                      arrow = arrow(length = unit(0.13, "cm")))

但是,这会生成以下图表:

如何做到只有一个箭头在正确的位置(在绿线的末端并旋转 180')?

谢谢!

我的数据如下:

dat <- 
structure(list(outcome = c("cancer", "cancer", "cancer", "cancer", 
"cancer", "cancer", "cancer", "cancer"), exposure = c("insulin", 
"insulin", "insulin", "insulin", "LDL-cholesterol", "LDL-cholesterol", 
"LDL-cholesterol", "LDL-cholesterol"), OR = c(3.925713203, 3.49400025, 
3.545796066, 8.283204105, 0.910187777, 0.902219745, 0.918412256, 
0.953392987), LCI = c(2.285899133, 1.609867994, 0.879681108, 
0.672007727, 0.817076527, 0.789469504, 0.82104523, 0.870226921
), UCI = c(6.741865347, 7.583253904, 14.29230392, 14.292304, 
1.013909666, 1.03107272, 1.027325952, 1.044507088), method = c("Inverse variance weighted", 
"Weighted median", "Weighted mode", "MR Egger", "Weighted mode", 
"MR Egger", "Weighted median", "Inverse variance weighted")), row.names = c(73L, 
74L, 75L, 76L, 139L, 140L, 141L, 142L), class = "data.frame")

【问题讨论】:

请将dput(dat) 的输出复制到问题中。没有人愿意花时间从图像中输入数据来测试解决方案。看看***.com/questions/5963269/… 另外,这里列出了不将代码或数据作为图像发布的原因:meta.***.com/a/285557/11374827 抱歉,已经更新了! 【参考方案1】:

答案其实很简单——只要把geom_segment(aes())里面的“x = 1, y = 14, xend = 1,yend = 14”改成把箭头放在正确的地方,把y比yend 稍微小一点,以使箭头指向正确的方向。

【讨论】:

以上是关于如何使用 ggplot 缩短带有箭头的长误差线?的主要内容,如果未能解决你的问题,请参考以下文章

使用ggplot将误差线添加到R中的聚簇条形图中

如何在 R 中的 ggplot 中为条形图添加误差线

在 R 中的折线图中添加误差线(ggplot)

重复测量图:叠加平均轨迹和误差线 (ggplot2)

ggplot2 中的误差线和线条不匹配

画图笔记:ggplot2优化柱形图(添加误差线、差异比较分析)