我正在使用ggplot中的条形图制作时间序列。当我将休息时间设置为2个月(使其比使用1个月更清晰,但比使用1年更有用)时,它从第二个月开始计算。我注意到,如果我设置了不同的数字,也会发生同样的事情-如果我设置为3,则标签将从3月开始,依此类推。
如果我制作折线图,则不会发生这种情况-休息时间从第一个月开始,但仍然有两个月度休息时间。
如何使标签从第一个月开始,然后从该月份开始设置休息时间?我也很高兴他们从上个月开始倒数。
这是我的代码:
library(ggplot2)
library(lubridate)
num_month <- seq(from = as.Date("2016-01-01"), to = Sys.Date(), by='month')
month_data <- as.data.frame(matrix(0, ncol = 0, nrow = length(num_month)))
month_data$month <- as.Date(num_month)
month_data$month_char <- format(month_data$month,"%Y-%m")
month_data$freq <- sample(100, size = nrow(month_data), replace = TRUE)
month_data <- month_data[!(month_data$month_char %in% current_month),]
random_bar_ts <- ggplot(month_data, aes(x = month, y = freq)) +
geom_bar(stat = "identity") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5, size = 12)) +
scale_x_date(labels = date_format("%b-%y"), breaks = "2 months", expand = c(0,0))
random_bar_ts
random_line_ts <- ggplot(month_data, aes(x = month, y = freq)) +
geom_line() +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5, size = 12)) +
scale_x_date(labels = date_format("%b-%y"), breaks = "2 months", expand = c(0,0))
random_line_ts
感谢您的帮助!
答案 0 :(得分:1)
这确实是不直观的,并且看起来没有参数可以直接移动标签。但是,您可以做的就是真正轻松地手动设置这些中断,特别是因为在这种情况下,您的数据可以很好地排序:
ggplot(month_data, aes(x = month, y = freq)) +
geom_bar(stat = "identity") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5, size = 12)) +
scale_x_date(labels = date_format("%b-%y"), expand = c(0, 0),
breaks = month_data$month[c(TRUE, FALSE)])
即使您有某种不规则的数据,也可以按两个月的时间间隔轻松设置间隔(间隔似乎与scale_x_date
相同或几乎相同)
with(month_data, seq(min(month), max(month), by = "2 months"))
# [1] "2016-01-01" "2016-03-01" "2016-05-01" "2016-07-01" "2016-09-01" "2016-11-01" "2017-01-01"
# [8] "2017-03-01" "2017-05-01" "2017-07-01" "2017-09-01" "2017-11-01" "2018-01-01" "2018-03-01"
# [15] "2018-05-01" "2018-07-01" "2018-09-01" "2018-11-01"