首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R: ggplot2 -基于主“月”x日期轴的二级“年度季度”x日期轴的缩放

R: ggplot2 -基于主“月”x日期轴的二级“年度季度”x日期轴的缩放
EN

Stack Overflow用户
提问于 2020-05-28 21:15:41
回答 1查看 491关注 0票数 0

我想要两个x轴。其中一个(小学最好)有年度季度,第二个有月份。我试图做到这一点,因为我的日期观察是不一致的/顺序的。也就是说,我只能让简在Q1,但在Q2的整整3个月。

我的尝试是使用scale_x_date,将日期设置为标准日期格式(as.Date()),并使用date_labelsbreaks。对于第二轴,我使用了dup_axis并通过了zoo::as.yearqtr

代码语言:javascript
复制
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)
               )
}

下面是我尝试的一幅情节图:

我在这里面对的缺点是:

  1. 这一季度是最后一个月(也就是三月),我想把它改为一月。--

额外的-其他低严重问题有:

  1. 所有的日期都是作图的,我想是因为我用的是scale_x_date,我们应该用scale_x_discrete ..如果我们只为存在的点编写标签,那会很有帮助,否则我可以让观众用他的眼睛来匹配/解释这些点。
  2. 这是最低的严重性,但是我想把参数传递给函数as.yearqtr,这样我就可以格式化四分之一了。也就是说,这将产生as.yearqtr(Sys.Date()) %>% format("%y Q%q") "20 Q2“而不是"2020 Q2"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-29 01:02:11

我已经将尝试更改为另一个视角,解决方案如下:

对于主要的问题,解决方案是使用sec_axis而不是dup_axis

其他低严重程度的解决方案包括:

为了只绘制现有的观测结果,我使用了unique()。这是在所以线程link中列出的

2-从函数as.yearqtr文档中,我可以看到format是一个函数参数,但是传递参数不起作用,所以我使用了这个解决方法-- labels = function(x) format(as.yearqtr(x),"%y Q%q")。谢谢@Axeman提供的语法/方式。

代码语言:javascript
复制
df %>% 
{
ggplot(data = ., aes(x = as.Date(date), y = id, group = 1)) +
  geom_line() +
  geom_point() +
  scale_x_date(breaks = unique(as.Date(.$date)), date_labels = "%b",
               sec.axis = sec_axis(name = "quarter", trans = ~ ., labels = function(x) format(as.yearqtr(x),"%y Q%q"))
  ) +
  xlab("month")
}

解图解结果:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62074650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档