美文网首页ggplot2绘图
真香定理 - ggplot2 双坐标轴

真香定理 - ggplot2 双坐标轴

作者: 吴十三和小可爱的札记 | 来源:发表于2019-11-08 17:53 被阅读0次

    ggplot2的作者hadley一直不建议使用双坐标轴,他认为双轴系统有很大缺陷,做出的图片往往具有迷惑性。但是最后架不住需要的人太多,而且由于语言太高级,能自己手动搞的人很少,作者最终还是给出了相应的解决方案。

    目前来看,第二条坐标轴往往需要和第一个坐标轴有映射关系,反正我暂时不会做那种任意值分割的第二条轴。

    测试数据

    由于iris的几列数据的mean太过相近,在iris后面加一列 - add 生成我们的测试数据。

    iris$add <- runif(150, min = 0, max = 1)
    

    数据处理

    col_data <- iris %>%
      group_by( Species)%>%  
      summarise(mean = mean(Sepal.Length))
    
    # 得到的均值为5左,该值将用于做柱状图
    # add 是一列均值为 0.5 左右的数据,如果和上面的柱状图放一起,
    # 几乎看不到三个分组间的差异,扩大10倍后,可以显示细微差异。
    
    line_data <- iris %>% 
      group_by(Species) %>% 
      summarise(mean_line = mean(add)*10)
    

    双坐标轴图

    col_plot <- ggplot() + 
      geom_col(data = col_data, aes(x = Species, 
                                y = mean, fill = Species), width = 0.5)
    
    p <- col_plot +
      geom_point(data = line_data, aes(x = Species, y = mean_line)) + 
      geom_line(data = line_data, aes(x = Species, y = mean_line), 
    group = 1)
    
    #添加第二条y坐标轴,(~ ./10)表示将数据处理过程中,
    # 对折线图mean值增加的10倍进行抵消,第二y轴标签显示为真实值
    p + scale_y_continuous(sec.axis = sec_axis(~ ./10, name = "add"))
    
    sec.png

    调整第二条y坐标轴titel方向

    p + 
      scale_y_continuous(sec.axis = sec_axis(~ ./10, name = "add")) +
      theme(axis.title.y.right = element_text(angle = 90,
                                              hjust =0.5))
    
    sec.png

    相关文章

      网友评论

        本文标题:真香定理 - ggplot2 双坐标轴

        本文链接:https://www.haomeiwen.com/subject/avdwbctx.html