使用分面展示不同组别的双 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

目录
相关文章
|
7月前
GEE图表——GEE绘制图表,设定双纵坐标图形以NDVI和RVI为例
GEE图表——GEE绘制图表,设定双纵坐标图形以NDVI和RVI为例
90 0
|
7月前
|
SQL
Grafana实现图表双Y坐标轴展示
Grafana实现图表双Y坐标轴展示
|
1月前
|
PHP
30 绘制三类图例
路老师在知乎上分享了PHP语言的知识,旨在帮助大家入门并深入理解PHP。本文介绍了如何使用JpGraph库创建柱形图、折线图和3D饼图,包括详细的代码示例和步骤说明。
29 2
5、标尺-参考线-网格
这篇文章介绍了Photoshop中标尺、参考线和网格的使用技巧,包括如何打开标尺、生成和删除参考线、隐藏和锁定参考线、修改参考线颜色,以及如何设置网格和调整网格样式。
5、标尺-参考线-网格
Echarts去掉叠堆折线区域图的区域颜色
Echarts去掉叠堆折线区域图的区域颜色
131 0
|
前端开发
Echarts柱状图y轴刻度标签图片和柱状渐变功能实现的解决方案
Echarts柱状图y轴刻度标签图片和柱状渐变功能实现的解决方案
305 0
|
数据采集 缓存 异构计算
案例分享:Qt多段Y轴折线图框架(双Y轴段折线、支持拽拖、浮动游标显示X值各段Y值、支持大量实时显示下位机数据)
案例分享:Qt多段Y轴折线图框架(双Y轴段折线、支持拽拖、浮动游标显示X值各段Y值、支持大量实时显示下位机数据)
案例分享:Qt多段Y轴折线图框架(双Y轴段折线、支持拽拖、浮动游标显示X值各段Y值、支持大量实时显示下位机数据)
Echarts 图表点击x轴y轴切换图表二级数据
学习过程中将笔记整理跟大家分享,希望对大家也有所帮助,共同成长进步💪~ 如果大家喜欢,可以点赞或留言💕~~~~,谢谢大家⭐️⭐️⭐️~~~
205 0
|
Python
Matplotlib在图形中添加辅助网格和辅助线
当我们查看图形时,可能需要快速估计出图形中某一部分的坐标,这时,向图形中添加辅助网格或辅助线将是一种提高图形可读性的良好方法。
1947 0
Matplotlib在图形中添加辅助网格和辅助线

热门文章

最新文章