我正试图用ggplot2中的geom_errorbar指定错误值。事实上,我有一个最小值和一个最大值,我想显示,而不是错误值。我试图通过在输入数据帧中添加两列来指定它们,一列称为lower,另一列名为upper。但是,当上下两列中的值不同时,正负误差条仍然相同。我在R中尝试了以下代码:
df <- data.frame(
Genome = factor(c("A", "Y", "MT","A", "Y", "MT","A", "Y", "MT")),
resp = c(67.3, 33.9, 86.7, 7.2,6.3,13.3,24.9,61.8,0.0),
group = factor(c("african", "african", "african",
"amerindian","amerindian","amerindian","european","european","european")),
upper = c(0.0, 44.8, 0.0, 0.0,10.0,0.0,0.0,71,0.0),
lower = c(0.0, 23.0, 0.0, 0.0,2.6,0.0,0.0,52.6,0)
)
# Default bar plot
p<- ggplot(df, aes(x=Genome, y=resp, fill=group)) +
geom_bar(stat="identity", color="black",
position=position_dodge()) +
geom_errorbar(aes(ymin=lower, ymax=upper), width=.2,
position=position_dodge(.9))
print(p)
有人知道问题出在哪里吗?当我更改下限值和上限值时,更接近resp值,这是有效的,但这些不是我需要绘制的值。
提前感谢!
这是我做过很多次的一个非常常见的错误。为geom_errorbar
指定ymin
和ymax
时,指定的是最小和最大y值本身,而不是与y值的+/-偏差。这意味着,如果您有一个y值为5的点,并且希望指示5+/-1,则不会指定ymin = -1
和ymax = +1
,而是指定ymin = y - 1
和ymax = y + 1
。有道理吗?
假设mi
和ma
是有符号值(意味着ma
是正值,mi
是负值(,您的代码应该如下所示:
p<- ggplot(df2, aes(x=dose, y=len, fill=Ancestry)) +
geom_bar(stat="identity", color="black",
position=position_dodge()) +
geom_errorbar(aes(ymin=len + mi, ymax=len + ma), width=.2,
position=position_dodge(.9))
print(p)
请注意,ymax
和ymin
引用了aes()
中的y
美学列。
如果列ma
和mi
的值都为正,则需要在aes()
中相应地调整符号。