r - 将标签与ggplot中的日历季度对齐
问题描述
考虑这个简单的例子
tibble(date = c(ymd('2021-01-01'),
ymd('2021-04-01')),
value = c(10, 20)) %>%
ggplot(aes(x = date, y = value)) + geom_col()
如您所见,条形图以 为中心date
。相反,我希望第一个条形图跨越 1 月到 3 月(第一季度)和 4 月到 6 月(第二季度)。
我怎样才能做到这一点?谢谢!
解决方案
或许,我们可以调整scale_x_date
library(dplyr)
library(ggplot2)
library(lubridate)
library(stringr)
start <- seq(min(tbl1$date), max(tbl1$date), by = '3 months')
end <- start %m+% months(2)
start_end <- str_c(format(start, '%b %Y'), format(end, '%b %Y'), sep='--')
tbl1 %>%
ggplot(aes(x = date %m+% days(40), y = value)) +
geom_col() +
scale_x_date(breaks = start, labels = start_end) +
xlab("date")
数据
tbl1 <- tibble(date = c(ymd('2021-01-01'),
ymd('2021-04-01')),
value = c(10, 20))
推荐阅读
- r - 如何删除日文字符?
- angular - 如何测试控制台值以满足单元测试?
- javascript - 如何将两个数组(具有 json 对象)推入一个新数组
- c# - 跨同一台计算机上的用户会话的 WCF 命名管道。可能的?
- aws-lambda - 在 AWS Lambda 函数中运行 Sharp 时出错:darwin-x64' 二进制文件不能在 'linux-x64' 平台上使用
- recaptcha - 来自recaptcha 的站点密钥是否被认为是敏感的?
- jsf - JSF FacesMessage 只显示一次,但应该在每次发生错误时显示
- c - Socket编程中listen()的目的是什么?
- google-analytics - GA 用户资源管理器显示零秒会话时间
- java - 将旧版 Spring MVC + JSP 应用程序与 Angular 应用程序一起运行是个好主意吗?