如何拥有第二个 y 轴并在其中嵌入折线图
How to have second y-axis and have line chart embedded in it
首先是示例代码和我在玩的操作。
library(tidyverse)
library(scales)
Month1 <- c(201812,20191,20192,20193,20194,20195,20196,
20197,20198,20199,201910,201911,201912,20201
,20202,20203,20204,20205,20206,20207
,20208,20209,202010,202011)
annualjobgrowth<- c(44400,46000,42600,40500,42800,40500,36000,
34000,32300,29900,21900,24500,21000,
23300,16000,-6200,-275600,-249500,-149200,
-136500,-129900,-122800,-113900,-109500)
Rate <-
c(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,annualjobgrowth, Rate)
secondces<-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_col(aes(x = date, y = annualjobgrowth),fill = "#00abff")+
geom_line(aes(x=date, y=Rate),stat="identity")+
scale_y_continuous(labels=comma,breaks=c(50000,0,-50000,-100000,-150000,-200000,-250000))+
scale_x_date(date_breaks="1 month", date_labels="%b\n")+
theme(axis.text.x = element_text(angle = 90, size=rel(0.5))) +
scale_fill_brewer(palette="Dark2")
我看了其他问题,好像会加上这样的内容。
scale_y_continuous(sec.axis = sec_axis(~./max(df$Rate)))
我的问题是如何将它与我现有的代码融合在一起。最终结果将是我现有的条形图,其中一条线表示 Rate 变量。如何添加第二个 scale_y_continuous 项目?
一种方法是预先计算主轴和次轴的最大值之间的比率。然后你可以用那个比例缩放两者。
Ratio <- max(cesyoy$annualjobgrowth)/max(cesyoy$Rate)
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_col(aes(x = date, y = annualjobgrowth), fill = "#00abff")+
geom_line(aes(x=date, y=Ratio*Rate),stat="identity")+
scale_y_continuous(labels=scales::comma,breaks=c(50000,0,-50000,-100000,-150000,-200000,-250000), name = "Growth",
sec.axis = sec_axis(~./Ratio, name = "Rate"))+
scale_x_date(date_breaks="1 month", date_labels="%b\n")+
theme(axis.text.x = element_text(angle = 90, size=rel(0.5))) +
scale_fill_brewer(palette="Dark2")
首先是示例代码和我在玩的操作。
library(tidyverse)
library(scales)
Month1 <- c(201812,20191,20192,20193,20194,20195,20196,
20197,20198,20199,201910,201911,201912,20201
,20202,20203,20204,20205,20206,20207
,20208,20209,202010,202011)
annualjobgrowth<- c(44400,46000,42600,40500,42800,40500,36000,
34000,32300,29900,21900,24500,21000,
23300,16000,-6200,-275600,-249500,-149200,
-136500,-129900,-122800,-113900,-109500)
Rate <-
c(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,annualjobgrowth, Rate)
secondces<-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_col(aes(x = date, y = annualjobgrowth),fill = "#00abff")+
geom_line(aes(x=date, y=Rate),stat="identity")+
scale_y_continuous(labels=comma,breaks=c(50000,0,-50000,-100000,-150000,-200000,-250000))+
scale_x_date(date_breaks="1 month", date_labels="%b\n")+
theme(axis.text.x = element_text(angle = 90, size=rel(0.5))) +
scale_fill_brewer(palette="Dark2")
我看了其他问题,好像会加上这样的内容。
scale_y_continuous(sec.axis = sec_axis(~./max(df$Rate)))
我的问题是如何将它与我现有的代码融合在一起。最终结果将是我现有的条形图,其中一条线表示 Rate 变量。如何添加第二个 scale_y_continuous 项目?
一种方法是预先计算主轴和次轴的最大值之间的比率。然后你可以用那个比例缩放两者。
Ratio <- max(cesyoy$annualjobgrowth)/max(cesyoy$Rate)
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_col(aes(x = date, y = annualjobgrowth), fill = "#00abff")+
geom_line(aes(x=date, y=Ratio*Rate),stat="identity")+
scale_y_continuous(labels=scales::comma,breaks=c(50000,0,-50000,-100000,-150000,-200000,-250000), name = "Growth",
sec.axis = sec_axis(~./Ratio, name = "Rate"))+
scale_x_date(date_breaks="1 month", date_labels="%b\n")+
theme(axis.text.x = element_text(angle = 90, size=rel(0.5))) +
scale_fill_brewer(palette="Dark2")