[英]Is there a ggplot2 form to “reverse” only one axis (geom_bar() ) when i plot two “y” axis in R
我正在嘗試 plot 一個兩個“y”軸,第一個軸的“土壤含水量”(geom_line())和一個帶有降水數據的 geom_bar()。 問題是降水圖。 我需要“反轉” plot。
我現在有這張圖表:
我需要土壤含水量時間序列如上圖,但降水量如下圖
轉換數據並不能解決問題,因為我無法轉換條形 plot 以將其可視化,因為數據是條形而不是點。 當我反轉 plot 時,兩個軸都反轉
“hum_melt10”數據框是一個包含 3 列的數據框:fecha = 日期(每日)、值 = 含水量(%)和變量 = 如果數據來自 model 的探針 o
“pp_melt”數據框是一個包含 3 列的數據框:fecha = 日期(每天),值 = 每天降水的厘米數,變量 = 如果水來自降水或灌溉
gpp = ggplot() +
geom_line(data = hum_melt10,aes(x = fecha, y = value, color = variable), size = 1.0) +
xlab("Fecha") +
geom_bar(data = pp_melt, aes(x = fecha, y = value / 20, fill = variable), stat="identity",position = 'dodge', na.rm = TRUE) +
scale_y_continuous(name = "Contenido de agua (%)",sec.axis = sec_axis(~.*20, name = "pp y riego (cm)")) +
scale_x_date(breaks = '2 month', labels = fecha, date_labels = '%b %y') +
theme(plot.title = element_text(lineheight=.8, face="bold", size = 20)) +
theme_bw() + theme( panel.grid.major = element_blank(),
panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"), aspect.ratio = 0.3)
謝謝!
同意@dmp, sec_axis
的使用只是在右邊添加了標簽; 如果您想翻轉它在 plot 中的外觀,您需要
scale_y_reverse()
,它將翻轉一切; 由於您只想反轉數據系列中的一個而不是全部,因此#1 不可用。 #3 確實有效,盡管您仍然需要修改對sec_axis
的調用,所以我會保持簡單,只做 #2。
library(ggplot2)
mt <- transform(mtcars, rn = 1:nrow(mtcars))
ggplot(mt) +
geom_bar(aes(x = rn, y = drat), stat = "identity") +
geom_line(aes(x = rn, y = disp/100), stat = "identity", color = "red", size = 1) +
scale_y_continuous(sec.axis = sec_axis(~ . * 100))
只翻轉紅線,我們改變了它在美學中的定義方式(盡管它可以在框架本身中改變)和sec_axis
。
ggplot(mt) +
geom_bar(aes(x = rn, y = drat), stat = "identity") +
geom_line(aes(x = rn, y = 5 - disp/100), stat = "identity", color = "red", size = 1) +
# changes: ^^^ vvv
scale_y_continuous(sec.axis = sec_axis(~ (5 - .) * 100))
(重要的是要記住,翻轉點(上例中的5
)基於主軸刻度,而不是新數據。)
如果沒有測試,我懷疑您的代碼的修復將是這樣的(從圖中推斷出9
)。
gpp = ggplot() +
geom_line(data = hum_melt10,aes(x = fecha, y = value, color = variable), size = 1.0) +
xlab("Fecha") +
geom_bar(data = pp_melt, aes(x = fecha, y = 9 - value / 20, fill = variable), stat="identity",position = 'dodge', na.rm = TRUE) +
# changes: ^^^ vvv
scale_y_continuous(name = "Contenido de agua (%)", sec.axis = sec_axis(~(9 - .)*20, name = "pp y riego (cm)")) +
scale_x_date(breaks = '2 month', labels = fecha, date_labels = '%b %y') +
theme(plot.title = element_text(lineheight=.8, face="bold", size = 20)) +
theme_bw() + theme( panel.grid.major = element_blank(),
panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"), aspect.ratio = 0.3)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.