Как поддерживать порядки факторов при использовании geom_point и geom_pointrange на одном графике?

РЕДАКТИРОВАТЬ: добавлен небольшой df.

У меня есть небольшой набор данных под названием benthic_data некоторых индексов бентических беспозвоночных (ниже приведен только один показатель).

Site <- c('S-7','S-7','S-7','S-7','S-7','S-27','S-27','S-27','S-27','S-27')
Sample <- c('S-7-1','S-7-2','S-7-3','S-7-4','S-7-5','S-27-1','S-27-2','S-27-3','S-27-4','S-27-5')
Abundance <- c(310, 316, 361,317, 321,108, 173, 189, 229, 210)

benthic_data <- data.frame(Site, Sample, Abundance)

Я сделал выборочные данные в качестве фактора и хотел бы сгенерировать цифру, которая имеет одну точку для каждой выборки, за которой следует среднее значение (с усами стандартного отклонения) для каждого сайта.

benthic_data$Sample = factor(benthic_data$Sample, levels=c('S-7-1', 'S-7-2','S-7-3','S-7-4','S-7-5','S-27-1','S-27-2','S-27-3','S-27-4', 'S-27-5'))

Базовый график сайтов и их соответствующее значение изобилия прекрасно работает (позже я улучшу рисунок):

ggplot(benthic_data, aes(x=Sample, y=Abundance, fill=Site))+
    geom_point(data = benthic_data, size = 4.0, colour="black", shape=21, show.legend = F)+
  scale_fill_manual(values = c("darkgreen", "orangered3"))

введите здесь описание изображения

Чтобы вычислить среднее значение и стандартное отклонение для каждого сайта, я использовал следующий код, чтобы попытаться учесть каждый сайт, и я также хочу, чтобы среднее/стандартное отклонение для каждого сайта было помечено как среднее значение S-7 и среднее значение S-27 соответственно.

benthic_summary<- as.data.frame(benthic_data) %>% 
  group_by(Site) %>% 
  summarize(mean=mean(Abundance, na.rm=T),
            sd=sd(Abundance, na.rm=T))

 benthic_summary$Site = revalue(benthic_summary$Site, c("S-7" = "S-7 Mean","S-27"="S-27 Mean"))
 benthic_summary$Site <- factor(benthic_summary$Site, levels= c("S-7 Mean","S-27 Mean"))

Теперь, чтобы объединить 5 баллов для каждого сайта ПЛЮС среднее/стандартное отклонение для каждого сайта, я использовал geom_pointrange со следующим кодом, но я добавил еще два цвета в scale_fill_manual, потому что получил это сообщение об ошибке: Ошибка: недостаточно значений в ручной шкале. Нужно 4, а предоставили только 2.

Таким образом, этот код работает нормально, ЗА ИСКЛЮЧЕНИЕМ, мне нужно сначала иметь образцы S-7 (это восходящий сайт), а затем образцы S-27, а легенда не отражает правильный цвет сайта.

Зона S-7 должна быть зеленой, а площадка S-27 — оранжево-красной.

AEMP_cols=c("darkgreen", "orangered3")

ggplot(benthic_data, aes(x=Sample, y=Abundance, fill=Site))+
    geom_point(data = benthic_data, size = 4.0, colour="black", shape=21, show.legend = F)+
  scale_fill_manual(values = c("darkgreen","darkgreen", "orangered3", "orangered3"))+
    geom_pointrange(data = benthic_summary, aes(x = Site, y=mean, ymin=mean-sd, ymax=mean+sd), colour = AEMP_cols, size =1, shape = 15) 

введите здесь описание изображения

Итак, я хотел бы помочь выяснить, как обеспечить порядок выборок (точек) по оси x: S-7-1, S-7-2 .... S-7-5, S7 Среднее затем С-27-1, С-27-2.... С-27-5, С-27 Ср. Аналогично коду, созданному выше, но с образцами сайтов S-7, за которыми следуют образцы S-27.

Я могу легко воссоздать код для других индексов, поэтому пока только начинаю с Изобилия.

Любая помощь будет оценена по достоинству. Спасибо.


person Frost_Queen    schedule 25.03.2020    source источник
comment
Можете ли вы предоставить воспроизводимый пример вашего набора данных, как описано здесь: stackoverflow.com/questions/5963269/   -  person dc37    schedule 25.03.2020
comment
Воспроизводимый df (bentic_data) добавлен выше. Спасибо за предложение.   -  person Frost_Queen    schedule 25.03.2020


Ответы (1)


Вы ищете что-то подобное?

Я начал с создания второго кадра данных с рассчитанным средним значением для каждого сайта, который я добавляю в качестве дополнительных строк исходного набора данных. Я реорганизовал уровни факторных Образцов и Сайта. Наконец я передал его в ggplot, используя geom_point и geom_errorbar:

library(dplyr)
library(ggplot2)

Mean_DF <- benthic_data %>% 
  group_by(Site) %>% 
  summarise(Mean = mean(Abundance), SD = sd(Abundance)) %>%
  mutate(Sample = c("S-27-Mean","S-7-Mean")) %>% rename(Abundance = Mean)

benthic_data %>% select(Site, Sample, Abundance) %>% bind_rows(., Mean_DF) %>%
  mutate(Site = factor(Site, levels = c("S-7","S-27"))) %>%
  mutate(Sample = factor(Sample, levels=c('S-7-1', 'S-7-2','S-7-3','S-7-4','S-7-5','S-7-Mean','S-27-1','S-27-2','S-27-3','S-27-4', 'S-27-5','S-27-Mean'))) %>%
  ggplot(aes(x = Sample, y = Abundance, color = Site))+
  geom_point()+
  geom_errorbar(aes(ymin = Abundance-SD, ymax = Abundance+SD), width = 0.2)+
  scale_color_manual(values = c("darkgreen", "orangered3"))

введите здесь описание изображения

person dc37    schedule 25.03.2020
comment
ЭТО ИМЕННО то, что я ищу! Благодарю вас! - person Frost_Queen; 26.03.2020