#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. Отлично, спасибо, переупорядочение имени на основе уже упорядоченного количества было лучшим решением для меня.