Я хотел бы сделать гистограмму в ggplot2 и сделать так, чтобы ggplot2 отображал мою ось X в том же порядке, что и в столбце Day44$Sample. Вот пример (мои реальные данные содержат 59 уровней факторов в столбце Day44$Sample.
Day44 <- data.frame(Sample = c(rep(6, 3), rep(8, 5), rep(12, 8), rep(100, 7), rep("41*", 3), rep("198*", 5)),
Phylum = c(rep("Proteobacteria", 3), rep("Actinobacteria", 5), rep("Firmicutes", 8),
rep("Chloroflexi", 7), rep("Cyanobacteria", 3), rep("Bacteroidetes", 5)),
Rel_Abund = c(rep(2.2, 3), rep(0.15, 5), rep(0.047, 8), rep(1.2, 7), rep(0.33, 3), rep(4.5, 5)))
Я читал, что для построения графика в том же порядке, что и мой столбец, я должен «сказать» ggplot2, что у меня уже есть упорядоченный фактор - на основе этого сообщения: Избегайте сортировки ggplot по оси x при построении графика geom_bar()
Вслед за постом:
Day44$Sample <- factor(Day44$Sample, levels = Day44$Sample)
когда я получаю следующую ошибку:
Error in
levels<-(*tmp*, value = as.character(levels)) : factor level 2 is duplicated
Итак, я нашел этот пост: Предупреждение при определении фактора: повторяющиеся уровни в факторах устарели.
и следуя этому примеру (исключая sort, рекомендованный в посте, потому что мне не нужно его сортировать):
Day44$Sample <- factor(Day44$Sample, levels = unique(Day44$Sample)
который я затем рисую с:
ggplot() + geom_bar(aes(x = Sample, y = Rel_Abund, fill = Phylum), data = Day44, stat = 'identity')
И это дает мне хороший график, однако; ось x в любом случае отсортирована.

Этот фрагмент кода подсказывает мне ошибку, которая дает:
factor(unique(Day44$Sample))
6 8 12 100 41* 198*
Levels: 100 12 198* 41* 6 8
Как я могу изменить это так, чтобы мои уровни располагались в том же порядке, что и мои уникальные значения для Day44$Sample?
Я знаю, что могу вставить их вручную, вот так:
Day44$Sample <- factor(Day44$Sample, levels = c("6", "8", "12", "100", "41*", "198*"))
создание точного графика, который мне нужен, но это нецелесообразно, поскольку мои реальные данные имеют 59 уровней, и мне приходится делать это и с несколькими другими графиками. Я никогда не закончу делать это вручную.
Какие-либо предложения?





Если вы хотите упорядочить уровни факторов в соответствии с порядком их появления в фрейме данных, используйте forcats::fct_inorder:
Day44$Sample = forcats::fct_inorder(Day44$Sample)
Спасибо за рекомендацию. Я установил пакет forcats и запустил код, и он работал прекрасно! Спасибо.
Подумав об этом еще раз,
Day44$Sample <- factor(Day44$Sample, levels = unique(Day44$Sample))должно было сработать - возможно, стоит попробовать еще раз, чтобы еще раз проверить свое понимание.