美文网首页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