使用分面展示不同组别的双 Y 轴图形

简介: 使用分面展示不同组别的双 Y 轴图形

简介

最近科研时候有个需求:使用分面展示不同组别的双 Y 轴图形。关于双轴绘制,在推文:基于 R 语言的科研论文绘图技巧详解(4)中已经展示过。但是,这幅图绘制包含了太多细节,当时没有细说。今天就基于前面的需求,重新把这类问题进行介绍。本文主要参考Posit Community 答疑帖[1]

教程

数据介绍

library(tidyverse)
# 加载数据=====
df = read_csv("df.csv")
head(df)

绘制双 Y 轴

首先,根据所需要求,将数据进行整理(使用 filter()group_by()mutate())。接下来绘制出两个 Y 轴需要展示的图形(geom_bar()geom_line(), geom_point())。此时得到的结果如下:

p1 = df %>% 
  filter(type == "Adult") %>%
  group_by(station) %>% 
  mutate(Percent = 100 * number/sum(number),
         station=factor(station)) %>%
  ggplot(aes(station, fill = species)) + 
  geom_bar(aes(y = Percent), position = "stack", stat = "identity") +
  geom_line(aes(y = depth /4, group = 1)) + 
  geom_point(aes(y = depth /4, group = 1))

注意:由于两个图形的 Y 轴范围差距过大,所以这里做了缩放处理(y = depth /4),读者需要根据自己数据做出判断。之后在展示 Y 轴刻度时进行对应修改即可。

之后,添加右侧 Y 轴刻度和标签:scale_y_continuous(sec.axis = sec_axis(~ . * 4, name = "Depth"))

注意:这里将 Y 轴刻度放大 4 倍,与前面 y = depth /4 对应。

# 双轴绘制 ======
p1 + scale_y_continuous(sec.axis = sec_axis(~ . * 4, name = "Depth"))

添加分面

在双 Y 轴的基础上可以添加分面来说明不同分类的比较情况。关于分面的更多教程/案例可见:分面中添加不同的直线R绘图案例|基于分面的折线图绘制分面中添加不同的直线等。

注意下面代码细节:space = "free_x" 使得 x 轴的空间排布自由化(不然三个类别空间大小相同)。scale = "free_x" 使得各类别的 x 轴刻度可以不同。

library(viridis)
p1 + theme_bw() +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1),
        panel.grid = element_blank()) +
  scale_fill_viridis(discrete = T) +
  facet_grid(~factor(zone,levels = c("A1","A2","A3")), scale = "free_x", space = "free_x")

本文完整代码和数据可见:https://github.com/liangliangzhuang/R_example

小编有话说

新学期即将开始,我即将进入博士二年级阶段。回顾博士一年级的经历,我虽然阅读了一些相关文章,也进行了一两项研究工作,但至今尚未投稿博士期间的论文。与完成博士毕业论文相比,我目前的进展仅相当于整个研究过程的大约 1/4。

学校学制是三年,能否顺利毕业关键看这学期了。革命尚未成功,同志仍须努力!

欢迎读者在评论区留下你们的新学期愿望~

参考资料

[1]

Posit Community 答疑帖: https://community.rstudio.com/t/add-secondary-axis-on-ggplot/138671/7

目录
相关文章
|
23天前
GEE图表——GEE绘制图表,设定双纵坐标图形以NDVI和RVI为例
GEE图表——GEE绘制图表,设定双纵坐标图形以NDVI和RVI为例
41 0
|
23天前
|
SQL
Grafana实现图表双Y坐标轴展示
Grafana实现图表双Y坐标轴展示
|
7月前
Echarts去掉叠堆折线区域图的区域颜色
Echarts去掉叠堆折线区域图的区域颜色
39 0
|
9月前
|
C#
C# GDI+绘图(四)实现网格绘制,并填充相应的表格内容
C# GDI+绘图(四)实现网格绘制,并填充相应的表格内容
|
11月前
Echarts实战案例代码(48):堆叠图实现图形和坐标轴对齐的解决方案
Echarts实战案例代码(48):堆叠图实现图形和坐标轴对齐的解决方案
110 0
|
11月前
Echarts实战案例代码(54):柱状图堆叠实现刻度线的解决方案
Echarts实战案例代码(54):柱状图堆叠实现刻度线的解决方案
67 0
|
11月前
|
前端开发
Echarts柱状图y轴刻度标签图片和柱状渐变功能实现的解决方案
Echarts柱状图y轴刻度标签图片和柱状渐变功能实现的解决方案
96 0
|
11月前
|
数据可视化
数据可视化Echarts学习(2):柱图任务进度完成比例图属性练习柱图堆叠
数据可视化Echarts学习(2):柱图任务进度完成比例图属性练习柱图堆叠
67 0