Is there a ggplot2 form to “reverse” only one axis (geom_bar() ) when i plot two “y” axis in R
我正在尝试绘制两个" y"轴,第一个具有%的"土壤水分含量"的轴(geom_line())和一个带有降水量数据的geom_bar()。问题是降水图。我需要"反转"情节。
我现在有这张图表:
我需要土壤水分时间序列如上图所示,但降水量如以下图所示
转换数据不能解决问题,因为我不能转换条形图以使其形象化,因为数据是条形而不是点。当我反转绘图时,两个轴都反转
" hum_melt10 "数据框是具有3列的数据框:fecha =日期(每天),值=水分含量(%),变量=如果数据来自模型的探针o,则
" pp_melt"数据框是一个包含3列的数据框:fecha =日期(每天),value =每天的降水量cm,变量=如果水来自降水或灌溉,则为
1 2 3 4 5 6 7 8 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 = 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,使用
由于您只想反转一个数据系列,而不是全部,所以#1出局了。 #3确实可以工作,尽管您仍然需要修改对
1 2 3 4 5 6 | 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)) |
仅翻转红线,我们就可以更改其在美学上的定义方式(尽管可以在框架本身中进行更改)和
1 2 3 4 5 | 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)) |
(重要的是要记住,翻转点(上例中的
未经测试,我怀疑您代码的修复将是这样(其中从图中推断出
1 2 3 4 5 6 7 8 9 10 | 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) |