Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 恢复GG2图中的二次y刻度_R_Ggplot2 - Fatal编程技术网

R 恢复GG2图中的二次y刻度

R 恢复GG2图中的二次y刻度,r,ggplot2,R,Ggplot2,我有以下数据框: observed <- c("1000","2000","3000","4000") simulated <- c("1100","2100","3100","4100") error <- c("-1","-2","-0.5","-4") Date <- c("2013-01-01","2013-01-02","2013-01-03","2013-01-04") y <- data.frame(Date,observed,simulated,er

我有以下数据框:

observed <- c("1000","2000","3000","4000")
simulated <- c("1100","2100","3100","4100")
error <- c("-1","-2","-0.5","-4")
Date <- c("2013-01-01","2013-01-02","2013-01-03","2013-01-04")
y <- data.frame(Date,observed,simulated,error)
y[-1] <- sapply(y[-1], as.character)
y[-1] <- sapply(y[-1], as.numeric)
y$Date <- as.Date(y$Date, format="%Y-%m-%d")

observed您的次轴看起来像这样的原因是因为这就是您转换数据的方式。由于您在第三条
几何图形线中将
错误
乘以
-500
,当错误变小时(即,接近
-8
),该线将上升。因此,要使次轴正确映射到您拥有的数据,它必须倒置(顶部为
-8

如果希望
0
位于顶部,只需将
错误和
秒轴中的
trans
公式除以正
500

ggplot(y, aes(x=Date)) +
    geom_line(aes(y=observed, colour = "observed"), size=1.5) +
    geom_line(aes(y=simulated, colour = "simulated"), size=1.5) +
    geom_line(aes(y=error*500, colour = "error"), size=1.5) +
    scale_colour_manual(name="Discharge [m3/sec]",
                        values = c('observed' = "blue",
                                   'simulated' = "black",
                                   'error' = "red")) +
    scale_y_continuous(sec.axis = sec_axis(~./500, name = "Error [%]",
                                           breaks = c(0, -2, -4, -6, -8))) +
    labs(y=expression(paste('Q [',m^3~s^-1,']'),
                      colour = "Parameter")) +
    theme(legend.position = c(0.2, 0.87),
          legend.title=element_blank(), 
          axis.title.x=element_blank())

如果要使两个图重叠,可以手动将8添加到
error
以将其上移,然后从
sec_轴中减去8以保持数字正确:

ggplot(y, aes(x=Date)) +
    geom_line(aes(y=observed, colour = "observed"), size=1.5) +
    geom_line(aes(y=simulated, colour = "simulated"), size=1.5) +
    geom_line(aes(y=(8 + error) * 500, colour = "error"), size=1.5) +
    scale_colour_manual(name="Discharge [m3/sec]",
                        values = c('observed' = "blue",
                                   'simulated' = "black",
                                   'error' = "red")) +
    scale_y_continuous(sec.axis = sec_axis(~(. / 500) - 8, name = "Error [%]",
                                           breaks = c(0, -2, -4, -6, -8))) +
    labs(y=expression(paste('Q [',m^3~s^-1,']'),
                      colour = "Parameter")) +
    theme(legend.position = c(0.2, 0.87),
          legend.title=element_blank(), 
          axis.title.x=element_blank())

其他提示:

  • 您可以像上面那样使用
    +
    操作符链接多个
    ggplot
    函数,而不是像示例中那样每次将中间结果保存到变量
  • 使用
    scale\u color\u manual
    的正确方法是将命名向量传递给
    值。这确保了给定的颜色值(即观察到的
    颜色)始终与正确的颜色(即
    蓝色
    )相关联
  • 如果希望误差线更小、更不占主导地位,只需减小变换因子即可。如果你乘(在
    geom_线
    中)和除(在
    sec_轴
    中)它被
    100
    而不是
    500
    得到一条更平坦的线。你得摆弄一下号码,让它看起来像你想要的。在
    ggplot2
    中,次轴必须是主轴的变换,因此不能只传递它自己的
    limits=
    参数

  • 您只想更改标签或将辅助y轴反转?是的,我想反转辅助y轴,使其从0到-8从上到下尝试将
    scale\u y\u continuous
    替换为
    scale\u y\u reverse
    oh nvm,这也会切换第一个y\u轴,抱歉,更正,我试过了,它反转了两个y刻度。@Tung谢谢!抢手货我以OP的例子为基础,甚至没有考虑检查颜色。我已经修正了。@divibisan如何使y轴上的误差线不那么明显,例如,将辅助y轴从9延伸到-20,使红线不再占主导地位,而是几乎是一条直线?@Matt减小误差线重要性的最佳方法是减少误差乘以的因子。如果你用
    100
    而不是
    500
    乘/除它,你会得到一条更平坦的线。你得把那个数字玩一玩。在
    ggplot
    中,第二个轴必须是第一个轴的变换,因此不能只给它一个不同的
    limits=
    参数。
    ggplot(y, aes(x=Date)) +
        geom_line(aes(y=observed, colour = "observed"), size=1.5) +
        geom_line(aes(y=simulated, colour = "simulated"), size=1.5) +
        geom_line(aes(y=(8 + error) * 500, colour = "error"), size=1.5) +
        scale_colour_manual(name="Discharge [m3/sec]",
                            values = c('observed' = "blue",
                                       'simulated' = "black",
                                       'error' = "red")) +
        scale_y_continuous(sec.axis = sec_axis(~(. / 500) - 8, name = "Error [%]",
                                               breaks = c(0, -2, -4, -6, -8))) +
        labs(y=expression(paste('Q [',m^3~s^-1,']'),
                          colour = "Parameter")) +
        theme(legend.position = c(0.2, 0.87),
              legend.title=element_blank(), 
              axis.title.x=element_blank())