geom_bar не отображает средние значения - PullRequest
0 голосов
/ 21 января 2020

В настоящее время я пытаюсь построить средние значения переменной pt для каждой комбинации видов / обработок в моих экспериментах. Вот код, который я использую:

ggplot(data = data, aes(x=treat, y=pt, fill=species)) +
 geom_bar(position = "dodge", stat="identity") +
 labs(x = "Treatment", 
      y = "Proportion of Beetles on Treated Side", 
      colour = "Species") +
 theme(legend.position = "right")

R output plot

Как вы можете видеть, график, кажется, принимает среднее значение моих 5N и 95E лечение составляет 1,00, что не правильно. Я понятия не имею, где проблема может быть здесь.

Ответы [ 2 ]

1 голос
/ 21 января 2020

Сделал удар по тому, что вы спрашиваете, используя tidyverse и ggplot2, которые находятся в tidyverse.

dat %>% 
  group_by(treat, species) %>% 
  summarise(mean_pt = mean(pt)) %>% 
  ungroup() %>% 
  ggplot(aes(x = treat, y = mean_pt, fill = species, group = species)) + 
  geom_bar(position = "dodge", stat = "identity")+
  labs(x = "Treatment", 
       y = "Proportion of Beetles on Treated Side", 
       colour = "Species") +
  theme(legend.position = "right") +
  geom_text(aes(label = round(mean_pt, 3)), size = 3, hjust = 0.5, vjust = 3, position =  position_dodge(width = 1))

dat - фактический набор данных. и я вычислил mean_pt как то, что вы пытаетесь построить. Я также добавил кусок geom_text, чтобы вы могли увидеть результаты и сравнить их с вашими мыслями.

0 голосов
/ 21 января 2020

Насколько я понимаю, это не будет отображать средние значения переменной y по умолчанию. Вы рассчитали средства для каждого лечения? Если нет, я бы рекомендовал добавить к вашему фрейму данных столбец, содержащий среднее значение. Я уверен, что есть более простой способ сделать это, но попробуйте:

data$means <- rep(NA, nrow(data))
for (x in 1:nrow(data)) {
    #assuming "treat" column is column #1 in your data fram
    data[x,ncol(data)] <- mean(which(data[,1]==data[x,1]))
}

Затем попробуйте заменить

geom_bar(position = "dodge", stat="identity")

на

geom_col(position = "dodge")

Если ваша переменная y уже содержит средства, просто переключение geom_bar на geom_col, как показано, должно работать. Geom_bar с stat = "identity" будет суммировать значения, а не возвращать среднее.

...