将错误条与ggplot2中的每个组的条数不同

时间:2018-12-28 18:16:01

标签: r ggplot2 geom-col

我试图在ggplot2的条形图中绘制误差条,每组的条数不同。我想要:

  • 固定的横条宽度,与每组中的横条数无关
  • 具有相同晶须宽度的误差线,与相应的误差线对齐

这应该是非常标准的,但是我在错误栏中苦苦挣扎,因为position_dodge()position_dodge2()中的设置似乎不像{{1 }}和geom_crossbar()文档。

我最接近的尝试是:

position_dodge

enter image description here

但是,误差线都没有与误差线对齐(位置3),也没有像我希望的那样具有相同的晶须宽度(位置2和3)。

我已经在Google上搜索并找到了一些类似的问题,但不完全是我的情况。因此,我希望能通过一个解决方案对我的尝试失败的原因进行一些解释。

ps。我知道如果我df <- data.frame( mean = 2:8, loc = c(rep(1, 4), 2, rep(3, 2)), # spcs = c(1:4, 1, 1:2), spcs = c(1:4, 1, 2, 4) # Updated on 29 Dec 2018 in response to @Roman Luštrik's comment ) ggplot(aes(x = factor(loc), y = mean, fill = factor(spcs)), data = df) + geom_col(position = position_dodge2(preserve = "single")) + geom_errorbar( aes(ymin = mean - 0.2, ymax = mean + 0.2), position = position_dodge(width = 0.9), width = 0.2 ) facet_grid()并设置loc会得到一个更接近的选择,但我宁愿在这里不使用facet。谢谢!

1 个答案:

答案 0 :(得分:2)

如果我也将闪避添加到错误栏中,我会得到:

ggplot(aes(x = factor(loc), y = mean, fill = factor(spcs)), data = df) + 
  geom_col(position = position_dodge(preserve = "single")) +
  geom_errorbar(
    aes(ymin = mean - 0.2, ymax = mean + 0.2),
    position = position_dodge(width = 0.9, preserve = "single"),
    width = 0.2)

enter image description here

编辑

我的猜测是,由于loc * spcs个因素的组合,某些因素正在下降,但是我现在没有足够的动力去检查。无论如何,一种解决方法是为缺失的因素添加缺失的值。

df <- data.frame(mean = 2:8, loc = c(rep(1, 4), 2, rep(3, 2)), spcs = c(1:4, 1, 2, 4))
df <- rbind(df, data.frame(mean = NA, loc = 3, spcs = c(1, 3)))

ggplot(aes(x = factor(loc), y = mean, fill = factor(spcs)), data = df) + 
  geom_col(position = position_dodge(preserve = "single")) +
  geom_errorbar(
    aes(ymin = mean - 0.2, ymax = mean + 0.2),
    position = position_dodge(width = 0.9, preserve = "single"),
    width = 0.2)

enter image description here