如何使工厂财政季度表现得像日期

时间:2017-09-25 13:53:20

标签: r

我正在整理一些功能,以帮助汇总财政季度的时态数据。我的功能将采取约会 - 例如。 2017-01-01 - 并吐出对应的因子字符值 - 例如。 ”1Q2017”。我正在使用我的数据在ggplot中创建图表。但由于我考虑了季度,我不能像geom_line()那样使用属性来连接我的数据点,就像你对日期一样。

我可以为显示为季度但行为类似日期的季度创建数据类型吗?我该怎么做?

3 个答案:

答案 0 :(得分:0)

从@Jaap获取评论并结合示例图表:

library(ggplot2)
library(zoo)

df <- data.frame(date1 = c("2017-01-01", "2016-10-01", "2016-07-01"),
                 v1 = c(2, 4, 3))
df$date1 <- as.Date(df$date1)

ggplot(df, aes(x = date1, y = v1)) +
  geom_line() + 
  scale_x_date(name = "quarters",
               date_labels = as.yearqtr)

答案 1 :(得分:0)

您只需在group=1中指定aes

library(tidyverse) # install.packages('tidyverse') if needed

dat = data_frame(date = seq.Date(as.Date('2017-01-01'), 
                                 as.Date('2017-12-31'), 
                                 length.out=365), 
                 x = rnorm(365))
dat = mutate(dat, qtr = paste0(lubridate::quarter(date), 'Q', lubridate::year(date)))
dat$qtr = as.factor(dat$qtr) # for similarity to your situation
dat %>%
    group_by(qtr) %>%
    summarise(n = sum(x)) %>%
    ggplot(aes(x=qtr, y=n, group=1)) +
    geom_line()

答案 2 :(得分:0)

动物园中的"yearqtr"类代表年/季,但到目前为止类似于日期,内部这样的对象在数字上表示为年+压裂,其中压裂是0,1 / 4,2 / 4,3 / 4并且可以对它们执行算术运算,它们可以格式化为平均年/四分之一字符串,并使用ggplot2中的行(以及经典图形和点阵图形)。请参阅?yearqtr?scale_x_yearqtr

library(ggplot2)
library(zoo)

# test data
dates <- c("2017-01-01", "2017-04-01")
values <- 1:2

z <- zoo(values, as.yearqtr(dates)) # test zoo object

# 1. classic graphics

plot(z, axat = "n") 
axis(1, at = time(z), labels = format(time(z), "%YQ%q"))

# 2. ggplot2 graphics

autoplot(z) + scale_x_yearqtr()

# 3. ggplot2 graphics using data frame with yearqtr

DF <- fortify.zoo(z) # test data frame
sapply(DF, class)
##     Index         z 
## "yearqtr" "integer" 

ggplot(DF, aes(Index, z)) + geom_line() + scale_x_yearqtr()