【发布时间】:2020-05-28 21:15:41
【问题描述】:
我想要两个 x 轴。其中一个(最好是主要的)有年份季度,第二个有月份。我正在尝试这样做,因为我的日期观察不是统一/连续的。即我可以在第一季度只有一月,但在第二季度整个 3 个月。
我的尝试是使用具有标准日期格式 (as.Date()) 的日期的scale_x_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,这样我就可以格式化季度。即这将 yieldas.yearqtr(Sys.Date()) %>% format("%y Q%q")"20 Q2" 代替 “2020 年第二季度”
【问题讨论】:
-
关于你的第一个低严重性问题,不,你不应该使用
scale_x_discrete,因为那样月之间的间隔将不再相同。如有必要,您可以将breaks调整为仅要标记的月份。 -
关于你的第二期,你可以写例如
labels = function(x) as.yearqtr(x, your, other, args)或labels = . %>% as.yearqrt(your, other, args). -
感谢您的建议,对于第二个低优先级问题,我相信他们通过了参数yes ..但他们不适用于
as.yearqrt,因为它不接受它。所以我从外面格式化了它:例如labels = function(x) format(as.yearqtr(x),"%y Q%q")