如何使用 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 缩短带有箭头的长误差线?的主要内容,如果未能解决你的问题,请参考以下文章