[英]Two plots within one facet in ggplot2
我有兩種類型的數據來創建兩種類型的 plot,條形和線。 它們具有不同的 y 軸,但具有相同的 x 軸。 它們都按相同的類別級別分類
示例代碼:
data <- data.frame( Station = sample(LETTERS[seq( from = 1, to = 4 )],50, rep = TRUE),
Date = sample(seq(as.Date('2015/01/01'), as.Date('2015/12/31'), by="day"), 50),
Presence = sample(0:10,50,rep = TRUE),
Noise = sample(70:130,50, rep=TRUE))
noise <- ggplot()+
geom_line(data = data,aes(x=Date, y= Noise, color= Station))+
scale_x_date(date_breaks = "1 month")+
facet_wrap(~Station, ncol=2, strip.position="right")+
theme(axis.title.x = element_text(margin = margin(t = 20)))+
guides(colour = guide_legend(override.aes = list(size=3)))+
coord_cartesian(xlim = c(as.Date("2015-02-01"),as.Date("2015-10-30")))+
labs( x='Date')+
theme_classic(base_family = "serif")
pres <-ggplot()+
geom_bar(data = data,aes(x= Date, y = Presence), stat = "identity")+
scale_x_date(date_breaks = "1 month")+
facet_wrap(~Station, ncol=2, strip.position="right")+
theme(axis.title.x = element_text(margin = margin(t = 20)))+
coord_cartesian(xlim = c(as.Date("2015-02-01"),as.Date("2015-10-30")))+
labs( x='Date')+
theme_classic(base_family = "serif")
我想做的是結合這兩個圖,但是 label 具有相同的方面(站)。
我在 Photoshop 中制作的快速示例如下所示:
等等
任何幫助,將不勝感激!
ggplot
沒有很好的方法來做到這一點,但它當然可以做到:
ggplot()+
geom_line(data = data,aes(x=Date, y= Noise, color= Station))+
geom_bar(data = data,aes(x= Date, y = Presence*10), stat = "identity")+
scale_x_date(date_breaks = "1 month")+
scale_y_continuous(
name = "Noise",
sec.axis = sec_axis(~./10, name="Presence")
) +
facet_wrap(~Station, ncol=2, strip.position="right")+
theme(axis.title.x = element_text(margin = margin(t = 20)))+
guides(colour = guide_legend(override.aes = list(size=3)))+
coord_cartesian(xlim = c(as.Date("2015-02-01"),as.Date("2015-10-30")))+
labs( x='Date')+
theme_classic(base_family = "serif")
所以這里要做的是在geom_bar
之后添加geom_line
並添加scale_y_continuous
。 后者中的sec.axis
提供了第二個軸,但是所有繪圖都將繪制在主軸上,而輔助軸沒有任何功能。 為了正確使用它,我們需要自己定義軸之間的比例並將它們添加到geom_bar
和sec.axis
。
如果要將比例更改為例如 5,則代碼如下所示:
ggplot()+
geom_line(data = data,aes(x=Date, y= Noise, color= Station))+
geom_bar(data = data,aes(x= Date, y = Presence*5), stat = "identity")+
scale_x_date(date_breaks = "1 month")+
scale_y_continuous(
name = "Noise",
sec.axis = sec_axis(~./5, name="Presence")
) +
facet_wrap(~Station, ncol=2, strip.position="right")+
theme(axis.title.x = element_text(margin = margin(t = 20)))+
guides(colour = guide_legend(override.aes = list(size=3)))+
coord_cartesian(xlim = c(as.Date("2015-02-01"),as.Date("2015-10-30")))+
labs( x='Date')+
theme_classic(base_family = "serif")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.