ggplot переупорядочивает геометрическую диаграмму снизу вверх

#r #ggplot2

#r #ggplot2

Вопрос:

У меня есть график ggplot, и я хочу, чтобы он отображал данные снизу вверх. Я знаю, как изменить порядок в зависимости от количества записей, но не по-другому. Это даты, используемые в качестве фактора.

Это обычный график

 x <- ggplot(data, aes(y = factor(date), fill=category)) 
y<- x geom_bar() ggtitle("Number of articles per date") 
  labs(y = "date", fill = "category")
print(y)
  

Это то, что я пробовал, но безрезультатно:

 data %>% arrange(date) %>% 
  ggplot(aes(y = factor(date), fill=category)) 
geom_bar() ggtitle("Number of articles per date") 
  labs(y = "date", fill = "category")
  

Возможно, есть способ использовать столбец «дата» как as.Date(), но я не знаю, как использовать количество записей на дату с помощью as.Date.

Есть идеи?

Ответ №1:

У меня нет ваших данных, поэтому я составил некоторые:

 dates <- seq(as.Date("2001-01-1"), as.Date("2001-01-12"), by = "day")
set.seed(123)
data <- data.frame(date = sample(dates, 200, replace = TRUE),
                 category = sample(LETTERS[1:5], 200, replace = TRUE))
  

Если я правильно понял ваш вопрос, вы хотите, чтобы самая ранняя дата была внизу? Вы можете сделать это, добавив a scale_y_discrete и установив разрывы как обратные уровню коэффициента:

 y   scale_y_discrete(breaks = rev(levels(factor(data$date))))
  

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

Если вы хотите, чтобы самая ранняя дата была внизу, не меняйте уровни. Используйте одно из следующих действий:

 y   scale_y_discrete(breaks = levels(factor(data$date)))
y   scale_y_discrete(limits = rev(levels(factor(data$date))))
  

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

1. Если вам нужна самая ранняя дата сверху, удалите rev и используйте scale_y_discrete(breaks = levels(factor(data$date)))

2. Спасибо за ваш ответ. На самом деле, я хочу, чтобы самая ранняя дата была сверху, это кажется более логичным, как вы думаете? На моем он показывает вниз. Хорошо, основываясь на вашем ответе, я попробовал это: « scale_y_discrete(limits = rev(уровни (фактор (данные $ дата)))) « Но я не совсем понимаю это. Зачем нам нужны уровни? В документации для scale_y_discrete() не упоминается обратный (я думаю). А также, почему «breaks = …» не работает, а «limits = …» работает? Данные можно найти здесь: [ github.com/Alqua/nCovMemory/blob/master/data/data.csv ]

3. каким-то образом « scale_y_discrete(разрывы = уровни (фактор (данные $ дата))) « не работает с моими данными. Он отображается с самой ранней датой вниз. Понятия не имею, почему.

4. Не возражаете добавить: scale_y_discrete(limits = rev(levels(factor(data$date)))) к вашему ответу? Тогда я мог бы пометить ее как правильную! Еще раз спасибо