如何让折线图中的每一年都是不同的颜色
How to have each year in Line chart be a different color
我看到其他问题是用条形图和柱形图完成的,但没有用折线图完成。我将如何做到每年的背景是单独的颜色?另外,你怎么把它放到刻面之间没有明显间隙的地方?
Month1 <- c(201811,201812,20191,20192,20193,20194,20195,20196,
20197,20198,20199,201910,201911,201912,20201
,20202,20203,20204,20205,20206,20207
,20208,20209,202010,202011)
Rate <-
c(3.2,3.3,3.4,3.1,3.0,3.1,2.9,2.6,2.5,2.3,2.1,1.6,1.7,1.5,1.7,1.1,-0.4,
-19.5,-17.6,-10.5,-9.6,-9.1,-8.6,-8.0,-7.7)
cesyoy <- data.frame(Month1,Rate)
#Chart
library(ggplot2)
library(dplyr)
library(lubridate)
library(scales)
library(odbc)
##日期
linechart<-cesyoy %>% mutate(year = substr(as.character(Month1),1,4),
month = substr(as.character(Month1),5,7),
date = as.Date(paste(year,month,"1",sep ="-"))) %>%
ggplot()+geom_line(aes(x=date,y=Rate),color="red")+
scale_y_continuous(labels =scales::percent)+
scale_x_date(date_breaks="1 month", date_labels="%b\n",
expand = c(0, 0))+
facet_wrap(.~year,scales = 'free_x',strip.position = 'bottom')+
theme(panel.grid.major= element_blank(),
axis.text.x = element_text(angle = 90, size=rel(0.6)),
panel.spacing = unit(0, "lines"),
strip.placement = 'outside',
strip.background = element_blank())+
ggtitle("Employment
Growth (%)")
你的意思是这样?
library(dplyr)
library(ggplot2)
cesyoy %>% mutate(year = substr(as.character(Month1),1,4),
month = substr(as.character(Month1),5,7),
date = as.Date(paste(year,month,"1",sep ="-"))) %>%
ggplot()+geom_line(aes(x=date,y=Rate, color = year))+
scale_y_continuous(labels =scales::percent)+
scale_x_date(date_breaks="1 month", date_labels="%b\n",
expand = c(0, 0))+
facet_wrap(.~year,scales = 'free_x',strip.position = 'bottom')+
theme(panel.grid.major= element_blank(),
axis.text.x = element_text(angle = 90, size=rel(0.6)),
panel.spacing = unit(0, "lines"),
strip.placement = 'outside',
strip.background = element_blank())+
ggtitle("Employment Growth (%)")
还有你真的需要这里的切面吗?没有它们看起来也很好。
如果你想改变每年的背景颜色,你可以添加一个geom_rect
并按年份填充。
解决跨方面的虚线问题相当复杂。 .
编辑:请参阅下面的第一个图表了解非分面解决方案。
library(dplyr)
library(ggplot2)
cesyoy %>%
mutate(year = substr(as.character(Month1),1,4),
month = substr(as.character(Month1),5,7),
date = as.Date(paste(year,month,"1",sep ="-"))) %>%
ggplot() +
geom_line(aes(x = date, y = Rate)) +
geom_rect(xmin = -Inf, ymin = -Inf, xmax = Inf, ymax = Inf, alpha = 0.1, aes(fill = year)) +
facet_wrap(~year, scales = "free_x") +
scale_y_continuous(labels = scales::percent) +
scale_x_date(date_breaks="1 month", date_labels="%b\n",
expand = c(0, 0)) +
ggtitle("Employment Growth (%)") +
theme(panel.grid.major = element_blank(),
axis.text.x = element_text(angle = 90, size = rel(0.6)),
panel.spacing = unit(0, "lines"),
strip.placement = 'outside',
strip.background = element_blank()) +
scale_fill_brewer(palette = "Spectral") +
guides(fill = FALSE)
非分面解
创建新变量,max_date
和 min_date
,它们是每年的开始和结束日期。然后将它们用作 geom_rect
.
的基础
cesyoy %>%
mutate(year = substr(as.character(Month1),1,4),
month = substr(as.character(Month1),5,7),
date = as.Date(paste(year, month, "1" , sep ="-"))) %>%
group_by(year) %>%
mutate(min_date = as.Date(paste(year, "01", "01", sep = "-")),
max_date = as.Date(paste(year, "12", "31", sep = "-"))) %>%
ungroup() %>%
ggplot(aes(date, Rate)) +
geom_line() +
geom_rect(aes(xmin = min_date, xmax = max_date, fill = year),
ymin = -Inf, ymax = Inf, alpha = 0.1) +
scale_fill_brewer(palette = "Spectral") +
guides(fill = FALSE)
我看到其他问题是用条形图和柱形图完成的,但没有用折线图完成。我将如何做到每年的背景是单独的颜色?另外,你怎么把它放到刻面之间没有明显间隙的地方?
Month1 <- c(201811,201812,20191,20192,20193,20194,20195,20196,
20197,20198,20199,201910,201911,201912,20201
,20202,20203,20204,20205,20206,20207
,20208,20209,202010,202011)
Rate <-
c(3.2,3.3,3.4,3.1,3.0,3.1,2.9,2.6,2.5,2.3,2.1,1.6,1.7,1.5,1.7,1.1,-0.4,
-19.5,-17.6,-10.5,-9.6,-9.1,-8.6,-8.0,-7.7)
cesyoy <- data.frame(Month1,Rate)
#Chart
library(ggplot2)
library(dplyr)
library(lubridate)
library(scales)
library(odbc)
##日期
linechart<-cesyoy %>% mutate(year = substr(as.character(Month1),1,4),
month = substr(as.character(Month1),5,7),
date = as.Date(paste(year,month,"1",sep ="-"))) %>%
ggplot()+geom_line(aes(x=date,y=Rate),color="red")+
scale_y_continuous(labels =scales::percent)+
scale_x_date(date_breaks="1 month", date_labels="%b\n",
expand = c(0, 0))+
facet_wrap(.~year,scales = 'free_x',strip.position = 'bottom')+
theme(panel.grid.major= element_blank(),
axis.text.x = element_text(angle = 90, size=rel(0.6)),
panel.spacing = unit(0, "lines"),
strip.placement = 'outside',
strip.background = element_blank())+
ggtitle("Employment
Growth (%)")
你的意思是这样?
library(dplyr)
library(ggplot2)
cesyoy %>% mutate(year = substr(as.character(Month1),1,4),
month = substr(as.character(Month1),5,7),
date = as.Date(paste(year,month,"1",sep ="-"))) %>%
ggplot()+geom_line(aes(x=date,y=Rate, color = year))+
scale_y_continuous(labels =scales::percent)+
scale_x_date(date_breaks="1 month", date_labels="%b\n",
expand = c(0, 0))+
facet_wrap(.~year,scales = 'free_x',strip.position = 'bottom')+
theme(panel.grid.major= element_blank(),
axis.text.x = element_text(angle = 90, size=rel(0.6)),
panel.spacing = unit(0, "lines"),
strip.placement = 'outside',
strip.background = element_blank())+
ggtitle("Employment Growth (%)")
还有你真的需要这里的切面吗?没有它们看起来也很好。
如果你想改变每年的背景颜色,你可以添加一个geom_rect
并按年份填充。
解决跨方面的虚线问题相当复杂。
编辑:请参阅下面的第一个图表了解非分面解决方案。
library(dplyr)
library(ggplot2)
cesyoy %>%
mutate(year = substr(as.character(Month1),1,4),
month = substr(as.character(Month1),5,7),
date = as.Date(paste(year,month,"1",sep ="-"))) %>%
ggplot() +
geom_line(aes(x = date, y = Rate)) +
geom_rect(xmin = -Inf, ymin = -Inf, xmax = Inf, ymax = Inf, alpha = 0.1, aes(fill = year)) +
facet_wrap(~year, scales = "free_x") +
scale_y_continuous(labels = scales::percent) +
scale_x_date(date_breaks="1 month", date_labels="%b\n",
expand = c(0, 0)) +
ggtitle("Employment Growth (%)") +
theme(panel.grid.major = element_blank(),
axis.text.x = element_text(angle = 90, size = rel(0.6)),
panel.spacing = unit(0, "lines"),
strip.placement = 'outside',
strip.background = element_blank()) +
scale_fill_brewer(palette = "Spectral") +
guides(fill = FALSE)
非分面解
创建新变量,max_date
和 min_date
,它们是每年的开始和结束日期。然后将它们用作 geom_rect
.
cesyoy %>%
mutate(year = substr(as.character(Month1),1,4),
month = substr(as.character(Month1),5,7),
date = as.Date(paste(year, month, "1" , sep ="-"))) %>%
group_by(year) %>%
mutate(min_date = as.Date(paste(year, "01", "01", sep = "-")),
max_date = as.Date(paste(year, "12", "31", sep = "-"))) %>%
ungroup() %>%
ggplot(aes(date, Rate)) +
geom_line() +
geom_rect(aes(xmin = min_date, xmax = max_date, fill = year),
ymin = -Inf, ymax = Inf, alpha = 0.1) +
scale_fill_brewer(palette = "Spectral") +
guides(fill = FALSE)