R 润滑间隔 class 用于标记轴
R lubridate interval class for labeling axis
这是我的 "old" 创建标签向量以标记绘图轴的方法。
require(lubridate)
require(dplyr)
#old
version <- "201710"
endDate = as.Date(paste0(version,"01"), "%Y%m%d")
startDateString = paste0(as.integer(substr(version, 1, 4)) - 3,substr(version, 5, 6))
startDate = as.Date(paste0(startDateString,"01"), "%Y%m%d")
datehv <- format(seq(startDate, endDate, "3 months"), "%Y-%m")
zeitbereich = c()
for(i in 1:(length(datehv)-1)) {
zeitbereich = c(zeitbereich, datehv[i], "", "")
}
zeitbereich = c(zeitbereich, datehv[length(datehv)])
labels <- substr(zeitbereich,1,7)
以下是新版本。这个想法是使用 lubridate 和 dplyr 以获得更好的可读性和更简单的语法
#new
version2 <- "201710"
endDate2 = ymd(paste0(version,"01"))
startDate2 = endDate2 - dyears(3)
zeitbereich2 <- interval(startDate2, endDate2)
如何从新的时间间隔生成旧代码中的矢量 "labels"?
a) 忽略 #old
标签向量中的“”点
b) 在标签向量中加入空的“”
我会将日期保留为日期。使用seq.Date
函数添加季度信息,然后在最后更改格式。
我不会改变你的循环,据我所知这是添加空格的最佳解决方案,也就是说,我会评估你为什么需要这些空格,可能有更好的方法不需要它们。
st <- as.Date("20140101", "%Y%m%d")
en <- as.Date("20170101", "%Y%m%d")
quarters <- seq.Date(from = st, to = en, "quarter")
readable <- format(quarters, as.character("%Y-%m"))
zeitbereich = c()
for(i in 1:(length(readable)-1)) {
zeitbereich = c(zeitbereich, readable[i], "", "")
}
zeitbereich = c(zeitbereich, readable[length(readable)])
所以最后我做到了。
df2 <- data.frame(
date = seq(Sys.Date(), len=100, by="1 day")[sample(100, 50)],
price = runif(50)
)
df2 <- df2[order(df$date), ]
st2 <- ymd("19960101")
en2 <- ymd("20000201")
months2 <- seq.Date(from = st2, to = en2, by = "month")
mutate(df2, date=months2)
b <- ggplot(df, aes(x=date, y=price)) + geom_line()
b + scale_x_date(date_breaks = "2 months")
日期列必须是日期 class 才能使 scale_x_date 生效。但是这样可以将日期设置为任何需要的时间(例如“3 年”)。
这是我的 "old" 创建标签向量以标记绘图轴的方法。
require(lubridate)
require(dplyr)
#old
version <- "201710"
endDate = as.Date(paste0(version,"01"), "%Y%m%d")
startDateString = paste0(as.integer(substr(version, 1, 4)) - 3,substr(version, 5, 6))
startDate = as.Date(paste0(startDateString,"01"), "%Y%m%d")
datehv <- format(seq(startDate, endDate, "3 months"), "%Y-%m")
zeitbereich = c()
for(i in 1:(length(datehv)-1)) {
zeitbereich = c(zeitbereich, datehv[i], "", "")
}
zeitbereich = c(zeitbereich, datehv[length(datehv)])
labels <- substr(zeitbereich,1,7)
以下是新版本。这个想法是使用 lubridate 和 dplyr 以获得更好的可读性和更简单的语法
#new
version2 <- "201710"
endDate2 = ymd(paste0(version,"01"))
startDate2 = endDate2 - dyears(3)
zeitbereich2 <- interval(startDate2, endDate2)
如何从新的时间间隔生成旧代码中的矢量 "labels"?
a) 忽略 #old
标签向量中的“”点b) 在标签向量中加入空的“”
我会将日期保留为日期。使用seq.Date
函数添加季度信息,然后在最后更改格式。
我不会改变你的循环,据我所知这是添加空格的最佳解决方案,也就是说,我会评估你为什么需要这些空格,可能有更好的方法不需要它们。
st <- as.Date("20140101", "%Y%m%d")
en <- as.Date("20170101", "%Y%m%d")
quarters <- seq.Date(from = st, to = en, "quarter")
readable <- format(quarters, as.character("%Y-%m"))
zeitbereich = c()
for(i in 1:(length(readable)-1)) {
zeitbereich = c(zeitbereich, readable[i], "", "")
}
zeitbereich = c(zeitbereich, readable[length(readable)])
所以最后我做到了。
df2 <- data.frame(
date = seq(Sys.Date(), len=100, by="1 day")[sample(100, 50)],
price = runif(50)
)
df2 <- df2[order(df$date), ]
st2 <- ymd("19960101")
en2 <- ymd("20000201")
months2 <- seq.Date(from = st2, to = en2, by = "month")
mutate(df2, date=months2)
b <- ggplot(df, aes(x=date, y=price)) + geom_line()
b + scale_x_date(date_breaks = "2 months")
日期列必须是日期 class 才能使 scale_x_date 生效。但是这样可以将日期设置为任何需要的时间(例如“3 年”)。