Я хотел бы иметь две оси x. Один из них (предпочтительно первичный) имеет квартал года, а второй - месяцы. Я пытаюсь сделать это, поскольку мои наблюдения за датами не являются единообразными / последовательными. т.е. у меня может быть только январь в первом квартале, но все 3 месяца во втором квартале.
Моя попытка заключалась в том, чтобы использовать scale_x_date
с датой в стандартном формате даты (as.Date()
) и с использованием date_labels
и breaks
. Для вторичной оси я использовал dup_axis
и передал zoo::as.yearqtr
.
library("zoo")
library("ggplot2")
set.seed(44)
## Creating a reproducible data-frame ##
df <- data.frame("id" = sample(1:100, 3, replace=TRUE),
"date" = c("2020-01-01","2020-02-01","2020-03-01",
"2020-04-01",
"2020-07-01","2020-09-01",
"2020-10-01","2020-11-01","2020-12-01")
)
## Plotting ##
df %>%
{
ggplot(data = ., aes(x = as.Date(date), y = id, group = 1)) +
geom_line() +
geom_point() +
scale_x_date(date_labels = "%b", breaks = "1 month",
sec.axis = dup_axis(name = "month", breaks = scales::date_breaks("3 month"), labels = as.yearqtr)
)
}
Вот графическое изображение моей попытки:
Недостатки, с которыми я сталкиваюсь здесь:
- Квартал строится за последний 3-й месяц (т.е. он будет соответствовать марту), я бы хотел, чтобы он соответствовал январю.
Дополнительно - другие проблемы с низкой серьезностью:
Все даты нанесены на график, я думаю, это потому, что я использую scale_x_date
, а мы должны использовать scale_x_discrete
. . Было бы полезно, если бы мы написали метки только для существующих точек, в противном случае я могу, чтобы зритель мог сопоставить / интерпретировать точки своими глазами.
Это самая низкая степень серьезности , но я хотел бы передать аргументы функции as.yearqtr
, чтобы можно было отформатировать четверть. т.е. это даст as.yearqtr(Sys.Date()) %>% format("%y Q%q")
«20 Q2» вместо «2020 Q2»