我正在整理一些功能,以帮助汇总财政季度的时态数据。我的功能将采取约会 - 例如。 2017-01-01
- 并吐出对应的因子字符值 - 例如。 ”1Q2017”
。我正在使用我的数据在ggplot中创建图表。但由于我考虑了季度,我不能像geom_line()
那样使用属性来连接我的数据点,就像你对日期一样。
我可以为显示为季度但行为类似日期的季度创建数据类型吗?我该怎么做?
答案 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()