Два подхода.
Поддельные данные:
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()
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"))
(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
, тогда это позволяет правильно упорядочить и другие вещи.)