我正在為每個月在 ggplot 圖中添加背景陰影。我的代碼作業正常,但我想更自動地完成這項任務。我的代碼示例:
library(ggplot2)
set.seed(1234)
n_month <- 26
df <- data.frame(
month = seq(as.Date("2015-01-01"), length.out = n_month, by = "month"),
sum = rnorm(n_month, mean = 200000, sd = 50000)
)
df$year_month <- format(df$month, "%Y-%m-%d")
df$year_month <- as.Date(df$year_month)
#這里我要配置每個月在ggplot圖中的geom_rect中使用。我想自動化這個任務
jan1 = as.Date("2015-01-01")
feb1 = as.Date("2015-02-01")
mar1 = as.Date("2015-03-01")
apr1 = as.Date("2015-04-01")
may1 = as.Date("2015-05-01")
jun1 = as.Date("2015-06-01")
jul1 = as.Date("2015-07-01")
ago1 = as.Date("2015-08-01")
sep1 = as.Date("2015-09-01")
oct1 = as.Date("2015-10-01")
nov1 = as.Date("2015-11-01")
dec1 = as.Date("2015-12-01")
jan2 = as.Date("2016-01-01")
feb2 = as.Date("2016-02-01")
mar2 = as.Date("2016-03-01")
apr2 = as.Date("2016-04-01")
may2 = as.Date("2016-05-01")
jun2 = as.Date("2016-06-01")
jul2 = as.Date("2016-07-01")
ago2 = as.Date("2016-08-01")
sep2 = as.Date("2016-09-01")
oct2 = as.Date("2016-10-01")
nov2 = as.Date("2016-11-01")
dec2 = as.Date("2016-12-01")
jan3 = as.Date("2017-01-01")
feb3 = as.Date("2017-02-01")
#Using geom_rect 我配置每個背景。我在示例中繪??制了幾個月的圖表,但我的目標是自動添加背景直到 2 月 3 日。
ggplot(df, aes(x = year_month, y = sum, group = 1))
geom_rect(mapping=aes( xmax=jan1, ymin=-Inf, ymax=Inf),
xmin=-Inf ,fill='lightblue', alpha=0.01, color=NA)
geom_rect(mapping=aes(xmin=jan1, xmax=feb1, ymin=-Inf,
ymax=Inf), fill='cornflowerblue', alpha=0.01, color=NA)
geom_rect(mapping=aes(xmin=feb1, xmax=mar1, ymin=-Inf,
ymax=Inf), fill='lightblue', alpha=0.01, color=NA)
geom_rect(mapping=aes(xmin=mar1, xmax=apr1, ymin=-Inf,
ymax=Inf), fill='cornflowerblue', alpha=0.01, color=NA)
geom_rect(mapping=aes(xmin=apr1, xmax=may1, ymin=-Inf,
ymax=Inf), fill='lightblue', alpha=0.01, color=NA)
geom_rect(mapping=aes(xmin=may1, xmax=jun1, ymin=-Inf,
ymax=Inf), fill='cornflowerblue', alpha=0.01, color=NA)
geom_rect(mapping=aes(xmin=jun1, xmax=jul1, ymin=-Inf,
ymax=Inf), fill='lightblue', alpha=0.01, color=NA)
geom_rect(mapping=aes(xmin=jul1, xmax=ago1, ymin=-Inf,
ymax=Inf), fill='cornflowerblue', alpha=0.01, color=NA)
geom_rect(mapping=aes(xmin=ago1, xmax=sep1, ymin=-Inf,
ymax=Inf), fill='lightblue', alpha=0.01, color=NA)
geom_rect(mapping=aes(xmin=sep1, xmax=oct1, ymin=-Inf,
ymax=Inf), fill='cornflowerblue', alpha=0.01, color=NA)
geom_rect(mapping=aes(xmin=oct1, xmax=nov1, ymin=-Inf,
ymax=Inf), fill='lightblue', alpha=0.01, color=NA)
geom_rect(mapping=aes(xmin=nov1, xmax=dec1, ymin=-Inf,
ymax=Inf), fill='cornflowerblue', alpha=0.01, color=NA)
geom_rect(mapping=aes(xmin=dec1, xmax=jan2, ymin=-Inf,
ymax=Inf), fill='lightblue', alpha=0.01, color=NA)
geom_rect(mapping=aes(xmin=jan2, xmax=feb2, ymin=-Inf,
ymax=Inf), fill='cornflowerblue', alpha=0.01, color=NA)
labs(fill = "year")
geom_point()
geom_line()
theme(axis.text.x = element_text(angle = 90, vjust = 0.5))

uj5u.com熱心網友回復:
我不會創建所有這些年月變數,而是為背景創建一個小的日期資料框:
rect_df <- data.frame(start = seq(as.Date("2015-01-01"),
length.out = n_month, by = "month"),
end = seq(as.Date("2015-02-01"),
length.out = n_month, by = "month"),
fill = c("lightblue", "cornflowerblue"))
這樣您的繪圖呼叫也更短,只需要一個geom_rect
ggplot(df, aes(x = year_month, y = sum, group = 1))
geom_rect(data = rect_df,
aes(xmin = start, xmax = end, fill = fill, ymin = -Inf, ymax = Inf),
alpha = 0.3, color = NA, inherit.aes = FALSE)
scale_fill_identity()
labs(fill = "year")
geom_point()
geom_line()
theme(axis.text.x = element_text(angle = 90, vjust = 0.5))

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/437580.html
下一篇:如何按數字順序放置圖例名稱
