#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))))
к вашему ответу? Тогда я мог бы пометить ее как правильную! Еще раз спасибо