Выравнивание баров ошибок с различным количеством баров на группу в ggplot2 - PullRequest
0 голосов
/ 28 декабря 2018

Я пытался нанести столбцы ошибок на график в ggplot2 с разным количеством баров в группе.Мне бы хотелось:

  • Фиксированная ширина баров независимо от количества баров в группе
  • Ошибка баров с одинаковой шириной усов, выровненных по соответствующим брускам

Это должно быть довольно стандартно, но я борюсь с ошибками, поскольку настройки в position_dodge() и position_dodge2() не кажутся такими простыми, как примеры в geom_crossbar() и position_dodge документация.

Моя ближайшая попытка:

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
  )

enter image description here

Однако ни одна из полос ошибок не была выровнена с полосами(Loc 3), и у них не было такой же ширины усов, как я хотел (Loc 2 и 3).

Я гуглил и нашел несколько подобных вопросов здесь, но не совсем мой случай.Поэтому я был бы признателен за решение с небольшим объяснением того, почему моя попытка не удалась.

пс.Я знаю, если бы я facet_grid() на loc и установил scales = "free_x", space = "free_x", я бы получил близкую альтернативу, но я бы не стал использовать здесь фасет.Спасибо!

1 Ответ

0 голосов
/ 28 декабря 2018

Если я добавлю уклонение к барам ошибок, я получу это:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...