Поддерживать порядок фреймов данных для столбчатой диаграммы с использованием ggplot2

#r #ggplot2 #bar-chart

#r #ggplot2 #столбчатая диаграмма

Вопрос:

Используя следующие фрейм данных и ggplot…

 sample ="BC04"
df<- data.frame(Name=c("Pseudomonas veronii", "Pseudomonas stutzeri", "Janthinobacterium lividum", "Pseudomonas viridiflava"),
                 Abundance=c(7.17, 4.72, 3.44, 3.33))

ggplot(data=df, aes(x=sample, y=Abundance, fill=Name))  
  geom_bar(stat="identity")
 

… создает следующий график

столбчатая диаграмма

Несмотря на то, что для параметра «geom_bar (stat=»identity»)» установлено значение «identity», он по-прежнему игнорирует порядок в фрейме данных. Я хотел бы получить порядок стека на основе процента изобилия (самый высокий процент вверху в порядке возрастания)

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

1. В наборе данных должен быть столбец с именем BC04

Ответ №1:

Ранее строки, переданные в ggplot , оценивались с aes_string помощью (который теперь устарел). Теперь мы преобразуем строку в sym bol и вычисляем ( !! )

 library(ggplot2)
ggplot(data=df, aes(x= !! rlang::sym(sample), y=Abundance, fill=Name))  
  geom_bar(stat="identity")
 

Или другой вариант .data

 ggplot(data=df, aes(x= .data[[sample]]), y=Abundance, fill=Name))  
  geom_bar(stat="identity")
 

Обновить

Проверяя график, может случиться так, что операционная система создала столбец с именем ‘sample. В этом случае мы reorder определяем «Имя» на основе desc конечного порядка «Изобилия»

 df$sample <- "BC04"
ggplot(data = df, aes(x = sample,  y = Abundance, 
  fill = reorder(Name, desc(Abundance))))   
       geom_bar(stat = 'identity')  
       guides(fill = guide_legend(title = "Name"))
 

-вывод

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


Или другой вариант — преобразовать ‘Name’ в factor с levels , упомянутый в качестве unique элементов ‘Name’ (поскольку данные уже расположены в порядке убывания «Изобилия»)

 library(dplyr)
df %>%
  mutate(Name = factor(Name, levels = unique(Name))) %>% 
  ggplot(aes(x = sample, y = Abundance, fill = Name))  
     geom_bar(stat = 'identity')
 

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

1. Отлично, спасибо, переупорядочение имени на основе уже упорядоченного количества было лучшим решением для меня.