如何在使用ggplot绘制yearqtr(zoo)数据时,设置scale_x_yearqtr的限制?

9

我将与以下类似的数据集一起工作:

head(nomis.lng.agg)
  quarter decile           avg.val
1 2004 Q4                1 5.680000
2 2005 Q1                1 5.745763
3 2005 Q2                1 5.503341
4 2005 Q3                1 5.668224
5 2005 Q4                1 5.244604
6 2006 Q1                1 5.347222

变量quarter是由zoo生成的yearqtr类。其余两列是数字。我正在生成一个使用以下ggplot语法的图:

ggplot(data = subset(x = df,
                     subset = df$decile== 1 |
                         df$decile== 10),
       aes(x = quarter, y = avg.val, group = decile)) +
    geom_line(aes(linetype=as.factor(decile)),
              size = 1) +
    scale_x_yearqtr(format = "%YQ%q", n  = 5) +
    xlab("Quarter") +
    ylab("Average val") +
    ggtitle("Plot") +
    scale_linetype_discrete(name="Legend") +
    theme(panel.background = element_blank(),
          axis.line = element_line(colour = "black"),
          axis.text = element_text(size = 12, colour = "black"),
          axis.title = element_text(size = 14, colour = "black"),
          panel.grid.minor = element_blank(),
          panel.grid.major.y = element_line(colour = "gray"),
          panel.grid.major.x = element_blank(),
          axis.text = element_text(size = 12, colour = "black"),
          legend.text = element_text(size = 12),
          legend.title = element_text(size = 12),
          legend.key.width=unit(1.5,"cm"),
          legend.position = "bottom",
          legend.key = element_rect(fill = "white"),
          legend.background = element_rect(colour = "black"),
          plot.title = element_text(face="bold"),
          plot.background = element_rect(colour = "black"))

图表几乎完美,除了x轴。当前的x轴看起来是这样的: broken axis 我的重点是代码scale_x_yearqtr(format = "%YQ%q", n = 5)。由于我的数据从2004年第四季度开始,我不想绘制2004年第一季度,但我想设置界限为:
scale_x_yearqtr(format = "%YQ%q", 
                    limits=c(min(quarter), max=max(quarter)))

然而,尽管如此,这并没有产生期望的结果:
min(df$quarter)
[1] "2004 Q4"
1个回答

18

我认为您只是没有正确指定limits。另外,为了更好地控制外观,请使用breaks参数(而不是n)。

# some data
df <- data.frame(x = as.yearqtr(2004 + seq(3, 8)/4), y = sample(1:6)) 

# setting limits only
ggplot(data = df, aes(x, y, group = 1)) +
  geom_line() +
  scale_x_yearqtr(limits = c(min(df$x), max(df$x)),
                  format = "%YQ%q")

输入图片描述

# setting breaks
ggplot(data = df, aes(x, y, group = 1)) +
  geom_line() +
  scale_x_yearqtr(breaks = seq(from = min(df$x), to = max(df$x), by = 0.25),
                  format = "%YQ%q")

输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接