簡體   English   中英

當我 plot R 中的兩個“y”軸時,是否有一個 ggplot2 形式來“反轉”一個軸(geom_bar())

[英]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。

我現在有這張圖表:

土壤含水量(%)和降水量(cm)時間序列

我需要土壤含水量時間序列如上圖,但降水量如下圖

我需要的降水,但含水量顛倒

轉換數據並不能解決問題,因為我無法轉換條形 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 中的外觀,您需要

  1. 使用scale_y_reverse() ,它將翻轉一切
  2. 在審美中手動翻轉系列; 或者
  3. 手動翻轉數據本身中的系列。

由於您只想反轉數據系列中的一個而不是全部,因此#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))

原始數據的ggplot

只翻轉紅線,我們改變了它在美學中的定義方式(盡管它可以在框架本身中改變)和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))

ggplot 在美學中翻轉一個數據

(重要的是要記住,翻轉點(上例中的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM