Как отобразить коробчатую диаграмму в порядке с датой оси x? - PullRequest
0 голосов
/ 06 августа 2020

Как я могу сделать это в порядке месяца, ось x не находится в классе даты, ее символе? Я пробовал использовать переупорядочивание, и сортировка в моем случае не работает.

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

1 Ответ

0 голосов
/ 06 августа 2020

Два подхода.

Поддельные данные:

set.seed(42) # R-4.0.2
dat <- data.frame(
  when = sample(c("Apr20", "Feb20", "Mar20"), size = 500, replace = TRUE),
  charge = 10000 * rexp(500)
)
ggplot(dat, aes(charge, when)) +
  geom_boxplot() +
  coord_flip()

basic plot, x-axis is in wrong order


Date class

This is what I'll call "The Right Way (tm)", for two reasons: if the data is date-like, them let's use Date; and allow R to handle the ordering naturally.

dat$when2 <- as.Date(paste0("01", dat$when), "%d%b%y")
ggplot(dat, aes(charge, when2, group = when)) +
  geom_boxplot() +
  coord_flip() +
  scale_y_date(labels = function(z) format(z, format = "%b%y"))

same plot, x-axis ordered by Date class

(I should note that I need both when2 and group=when: since when2 is a continuous variable, ggplot2 is not going to auto-group things based on it, so we need group=.)


factor

I think this is the wrong approach, for two reasons: (1) not using dates as the numeric data they are; and (2) the more months you have, the more you have to manually control the levels within the factors.

However, having said that:

dat$when3 <- factor(dat$when, levels = c("Feb20", "Mar20", "Apr20"))
ggplot(dat, aes(charge, when3)) +
  geom_boxplot() +
  coord_flip()

тот же сюжет, отсортированный по фактору, а не по дате

(Вы можете легко перезаписать dat$when вместо создания новой переменной dat$when3, но я оставил ее отдельно, потому что здесь я переходил туда и обратно во время тестирования кода. Честно говоря, если вы предпочитаете не go маршрут Date, тогда это позволяет правильно упорядочить и другие вещи.)

...