在R中为水平条形图添加误差线时遇位置错误问题求助
搞定R语言水平条形图误差线位置错误的问题
嘿,我知道你现在被这个误差线位置的问题卡着了,别着急,咱们一步步来解决它。
首先得说清楚问题出在哪:当你用horiz=TRUE画水平条形图时,barplot()返回的barplot1其实是每个条形在y轴上的位置坐标,而你之前调用arrows()的时候参数顺序完全搞反了——arrows()的前两个参数是起始点的x、y坐标,后两个是终点的x、y坐标,你把y轴的位置和x轴的误差范围弄混了,难怪位置不对。
接下来咱们一步步修正:
第一步:先把数据整理成规范的数据框
先把你的向量整合成数据框,避免后续代码出错:
trait2 <- c('A','B','C','D') rg <- c (0.5480, 0.4801, 0.2805, -0.2480) se <- c(0.0495, 0.0908, 0.0548, 0.0957) data <- data.frame(trait2, rg, se)
第二步:修正条形图和误差线的代码
因为是水平条形图,误差线应该是水平方向的,也就是每个误差线的y坐标和对应条形的y坐标一致,x坐标从rg - se到rg + se。修正后的完整代码如下:
# 先创建规范的数据框 trait2 <- c('A','B','C','D') rg <- c (0.5480, 0.4801, 0.2805, -0.2480) se <- c(0.0495, 0.0908, 0.0548, 0.0957) data <- data.frame(trait2, rg, se) # 绘制水平条形图,保存每个条形的y轴位置到barplot1 barplot1 <- barplot(data$rg, main="Correlation between traits", xlab="rG", border="blue", las=1, horiz=TRUE, names.arg=data$trait2, cex.names=0.5, xlim=c(-0.4, 0.6)) # 这里把xlim改得更简洁准确,原来的range用法不对哦 # 添加误差线:x轴从rg-se到rg+se,y轴固定为对应条形的位置 arrows(x0 = data$rg - data$se, y0 = barplot1, x1 = data$rg + data$se, y1 = barplot1, lwd=1.5, angle=90, code=3, length=0.05)
为啥之前的代码会出错?
你之前写的arrows(barplot1, data$rg- data$se, data$rg+ data$se, ...),相当于把条形的y轴位置当成了误差线的x起始点,把误差范围的x值当成了y起始点,这就把误差线画成垂直方向的了,位置当然完全错位。现在把参数对应正确,误差线就会精准对齐每个条形的末端啦。
另外补充个小细节:你原来的xlim=range(-0.4,0.6,0.1)其实是错误的用法,range()函数是用来取向量的最小值和最大值的,这里直接用c(-0.4, 0.6)来指定x轴的范围就可以了,这样更准确。
内容的提问来源于stack exchange,提问作者Aron
相关产品推荐
相关产品推荐

