辅助轴绘图

时间:2020-06-25 14:47:15

标签: r ggplot2

我试图覆盖条形图(主轴)和折线(次级轴),但是我不断收到一个错误,我不知道如何解决。我尝试从其他问题中借鉴多个例子,但仍然没有得到所需的结果。

这是我的代码:

ggplot(data = MRIP, aes(x = Length_mm)) +
    geom_bar(aes(y = Perc.of.Fish), stat="identity", width = 10, fill = "black") + 
    geom_line(aes(y = Landings), stat = "identity", size = 2, color = "red") +
    scale_y_continuous(name = "Percentage", sec.axis = sec_axis (~./Landings, name = "Landings")) 

如何解决此错误:“ f(...)中的错误:未找到对象'Landings'?

1 个答案:

答案 0 :(得分:2)

尝试一下:

coef <- 4000
MRIP %>% 
    mutate(LandingsPlot=Landings/coef) %>% 
    ggplot(aes(x = Length_mm)) +
    geom_col(aes(y = Perc.of.Fish), width = 10, fill = "black") + 
    geom_line(aes(y = LandingsPlot), size = 2, color = "red") +
    scale_y_continuous(
      name = "Percentage", 
      sec.axis = sec_axis (trans= ~.*coef, name = "Landings")
    ) 

给予

modified plot

为什么这样做?用于定义辅助轴的比例因子不能成为输入data.frame的一部分-因为如果是这样,它可能会在各行之间发生变化(如此处所示)。这意味着您对输入data.frame的每一行都有单独的标度。那没有道理。因此,您可以缩放次要变量以使其范围与主要变量相似。我选择了coef <- 4000。确切的值无关紧要,只要有意义即可。

通过比例因子进行以获得绘图值,在转换中需要将乘以乘以比例因子,以便在次级图像上获得正确的标签轴。

感谢您提供良好的MWE。但是,下次,为获得额外的分数,请在您的问题中而不是在评论中张贴dput()的结果...

更新 为了在评论中回答OP的后续问题:传说与美学联系在一起。因此,要获得图例,请在aes()中移动要标记的属性。然后,您可以使用适当的scale_<aesthetic>_<type>定义和自定义图例。但是,值得注意的是,如果您写aes(colour="black"),则"black"只是一个字符串。它没有定义颜色。 (使用标准默认值,它实际上会显示为略带粉红色的红色,标记为“黑色”!)这可能会造成混淆,因此最好使用"a",{{1}之类的任意字符串}和"b"(或"c""Landings")。反正...

"Percentage"

给予

enter image description here