当我在R中绘制两个“ y”轴时,是否存在ggplot2形式仅“反转”一个轴(geom_bar())

时间:2019-10-24 14:30:55

标签: r ggplot2 plot timeserieschart

我正在尝试绘制两个“ y”轴,第一个轴以%(geom_line())和带有降水量数据的geom_bar()表示“土壤水分”。问题是降水图。我需要“扭转”情节。

我现在有这张图表:

Soil water content (%) and precipitation (cm) time serie

我需要土壤含水量时间序列如上图,而降水量如下图

precipitation as i need but water content reversed

转换数据不能解决问题,因为我不能转换条形图以使其颠倒地可视化,因为数据是条形而不是点。当我反转绘图时,两个轴都反转了

“ hum_melt10”数据帧是一个包含三列的数据帧:fecha =日期(每天),值=水分含量(%),变量=如果数据来自模型的探针o

“ pp_melt”数据框是一个包含3列的数据框:fecha =日期(每天),value =每天的降水量cm,变量=如果水来自降水还是灌溉

String userInputText=userText.getString().toString();

    @Override 
    onTextChanged(CharSequence s, int start, int before, int count){
        compareText(s, userInputText); //compare and do whatever you need to do
        previousText = s;
    }

谢谢!

1 个答案:

答案 0 :(得分:2)

同意@dmp,使用sec_axis仅在右边添加标签;如果要翻转显示的外观,则需要

  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 of original data

仅翻转红线,就可以更改美学定义(尽管可以在框架本身中更改)和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 where one data is flipped in the aesthetic

(重要的是要记住,翻转点(上例中的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)