带有双Y轴的ggplot图

时间:2020-06-11 11:59:11

标签: r ggplot2 yaxis

我正在尝试制作一个具有双y轴的图形。

我的数据如下:

    year      variable          value
1   2009    Letselongevallen    4455
2   2010    Letselongevallen    4337
3   2011    Letselongevallen    4710
4   2012    Letselongevallen    4666
5   2013    Letselongevallen    4460
6   2014    Letselongevallen    4400
7   2015    Letselongevallen    4284
8   2016    Letselongevallen    4467
9   2017    Letselongevallen    4199
10  2018    Letselongevallen    4433
11  2009    Doden   21
12  2010    Doden   20
13  2011    Doden   22
14  2012    Doden   26
15  2013    Doden   25
16  2014    Doden   30
17  2015    Doden   28
18  2016    Doden   26
19  2017    Doden   17
20  2018    Doden   16

“ letelongevallen”和“ doden”都需要位于不同的轴上。

这是我写的代码

hitrun_graph = ggplot(hitrun_graph1,
                     aes(x = year,
                         y = value, 
                         group = variable,
                         colour = variable)) +
              theme_minimal(base_size = 16) +
              geom_line(size = 2.25) +
              scale_y_continuous(name = "Letselongevallen", limits = c(0,5000),
                                 sec.axis = sec_axis(~./ 142, name = "Doden 30 dagen")) +
              scale_fill_manual(ColorsAll) +
              labs(x = NULL) +
              theme(legend.title = element_blank(),
                    legend.text=element_text(size = 22),
                    axis.text.x = element_text(size = 22),
                    axis.text.y = element_text(size = 22),
                    legend.position = "right")

这给了我一个带有双y轴的图形,但是如何强制R将“ Doden”放在右侧的轴上?

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用facet_grid并设置scales = "free"。在这种情况下,您还需要删除手动设置轴的代码。

ggplot(hitrun_graph1,
  aes(x = year,
      y = value, 
      group = variable,
      colour = variable)) + 
  theme_minimal(base_size = 16) +
  geom_line(size = 2.25) +
  labs(x = NULL) +
  theme(legend.title = element_blank(),
        legend.text=element_text(size = 22),
        axis.text.x = element_text(size = 22),
        axis.text.y = element_text(size = 22),
        legend.position = "right") + 
  facet_grid(rows = vars(variable), scales = "free")

enter image description here

以下是示例的数据:

structure(list(year = c(2009, 2010, 2011, 2012, 2013, 2014, 2015, 
2016, 2017, 2018, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 
2017, 2018), variable = c("Letselongevallen", "Letselongevallen", 
"Letselongevallen", "Letselongevallen", "Letselongevallen", "Letselongevallen", 
"Letselongevallen", "Letselongevallen", "Letselongevallen", "Letselongevallen", 
"Doden", "Doden", "Doden", "Doden", "Doden", "Doden", "Doden", 
"Doden", "Doden", "Doden"), value = c(4455, 4337, 4710, 4666, 
4460, 4400, 4284, 4467, 4199, 4433, 21, 20, 22, 26, 25, 30, 28, 
26, 17, 16)), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"
), row.names = c(NA, -20L), spec = structure(list(cols = list(
    X1 = structure(list(), class = c("collector_double", "collector"
    )), year = structure(list(), class = c("collector_double", 
    "collector")), variable = structure(list(), class = c("collector_character", 
    "collector")), value = structure(list(), class = c("collector_double", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
"collector")), skip = 1), class = "col_spec"))
相关问题