Мой штрих-код с ошибками в ggplot2 неверен

#r #ggplot2

Вопрос:

Минимальный воспроизводимый пример приведен здесь:

 library(ggplot2)

vals <- c(10, 12, 13, 20, 21, 28)
err <- c(0.85, 1.2, 0.9, 1.35, 2.2, 0.98)
cat <- c(rep("A",3),rep("B",3))

df <- data.frame(vals, err, cat)
df$cat<- as.factor(df$cat)

ggplot(df, aes(x=cat, y=vals, fill=vals))  
  geom_bar(stat='identity', position='dodge')  
  geom_errorbar(aes(ymin=vals-err, ymax=vals err), width=.1)
 

Этот код возвращает такой сюжет:
что такое

однако я ожидал, что две колонки будут расположены рядом друг с другом cat . Ближе к этому:

должно быть

Что я здесь делаю не так?

Комментарии:

1. Я считаю, что непрерывное заполнение сбивает с толку "dodge" . Один из вариантов-переключиться на использование "dodge2" . В качестве альтернативы добавьте group = factor(vals) в свой глобальный aes() , чтобы dodge знал категории, от которых нужно уклоняться. Я думаю, что последнее может быть проще всего, если вы собираетесь добавить уклоняющиеся бары

Ответ №1:

Если каждая строка представляет собой отдельное наблюдение, вам нужно сделать это явным. Сделайте переменную индекса, превратите ее в коэффициент и поместите ее на ось x.

Если obs повторяется в разных категориях (например, если и A, и B имеют obs номера 1, 2 и 3), то грань на cat с. facet_wrap(~ cat)

 
vals <- c(10, 12, 13, 20, 21, 28)
err <- c(0.85, 1.2, 0.9, 1.35, 2.2, 0.98)
cat <- c(rep("A",3),rep("B",3))

df <- data.frame(vals, err, cat)
df$cat<- as.factor(df$cat)
df$obs <- factor(1:nrow(df))

ggplot(df, aes(x=obs, y=vals, fill=cat))  
  geom_col(position='dodge')  
  geom_errorbar(aes(ymin=vals-err, ymax=vals err))
 

введите результат