python - 如何在 R 或 python 中绘制时间序列上的聚集水平条形图
问题描述
我是 R 的新手,但我一直在寻找一个图表,在 R 中的时间序列上显示分组(或集群)水平条。我一直在网上研究,但一直没有能够找到这种图表。我知道它可以做到,因为在 TropFishR 1 2包中有一个类似于我打算做的图表,如下所示:
这些图表显示了鱼类或贝类渔业的长度频率数据的时间序列,以评估其种群。当研究人员只有正在研究的海洋生物种群的生物体长度的数据时,这种可视化数据的方式是合适的。这些类型的图表已使用 FiSAT 3软件用于水生昆虫种群,如 Perán 等人,1999 4和 2000 5。见下图:
在这种情况下,它是一种水生甲虫种群,已经确定了四个水生生命阶段:幼虫阶段 I、II、III 和成虫(或成虫)。即三个幼虫阶段和成虫阶段。从这四个重要阶段中的每一个阶段,在一系列样本中对一年中捕获的个体进行计数,旨在以图表形式显示其种群的动态,该图表显示四个生命阶段随样本日期的变化采取。
数据集可以通过两种方式排列:
1º.- 在三列中:日期、重要阶段、总渔获量。
2º.- 在五列中:日期、幼虫阶段 I、同上阶段 II、同上阶段 III 和同上成虫的总捕获量。
第一个选项是最紧凑的。数据集如下:
Date Life_Stage Tcatch
1 2009-10-10 LI 11
2 2009-10-10 LII 169
3 2009-10-10 LIII 488
4 2009-10-10 A 168
5 2009-12-12 LI 0
6 2009-12-12 LII 0
7 2009-12-12 LIII 0
8 2009-12-12 A 122
9 2010-2-20 LI 0
10 2010-2-20 LII 0
11 2010-2-20 LIII 0
12 2010-2-20 A 16
13 2010-4-17 LI 0
14 2010-4-17 LII 10
15 2010-4-17 LIII 7
16 2010-4-17 A 6
17 2010-6-9 LI 0
18 2010-6-9 LII 4
19 2010-6-9 LIII 1
20 2010-6-9 A 51
21 2010-8-14 LI 0
22 2010-8-14 LII 0
23 2010-8-14 LIII 0
24 2010-8-14 A 18
25 2010-10-12 LI 0
26 2010-10-12 LII 0
27 2010-10-12 LIII 0
28 2010-10-12 A 58
29 2010-12-11 LI 0
30 2010-12-11 LII 0
31 2010-12-11 LIII 0
32 2010-12-11 A 359
33 2011-2-19 LI 2
34 2011-2-19 LII 37
35 2011-2-19 LIII 83
36 2011-2-19 A 92
第二个选项如下:
Date LI LII LIII A
2009-10-10 11 169 488 168
2009-12-12 0 0 0 122
2010-2-20 0 0 0 16
2010-4-17 0 10 7 6
2010-6-9 0 4 1 51
2010-8-14 0 0 0 18
2010-10-12 0 0 0 58
2010-12-11 0 0 0 359
2011-2-19 2 37 83 92
将出现一个时间序列,在 x 轴(日期)上显示样本日期。在 y 轴上将出现四个生命阶段 (Life_Stage),水平条的长度将以捕获的个体数量 (Tcatch) 表示。由于数据从 0 变化到几乎 500,这将对其图形表示造成问题。为了解决这个问题,我建议之前使用以下公式对 Tcatch 变量中的数据进行转换:
yi = log5 (xi + 1)
这将允许有一个以 5 为底的对数刻度的 y 轴,尽管它也可以以 10 为底。
不幸的是,TropFishR 包不允许从我的数据集生成这种类型的图表,因为数据集的结构不兼容,因为 y 轴需要一个定量变量,即长度频率。在这种情况下,它是一个分类变量(生命阶段)。
使用 ggplot2 包,我设法获得了以下图表:
但是,在此图表中,条形显示为垂直而不是水平。
使用 coord_flip() 是不合适的,因为它不仅限于旋转条形,而是翻转整个图形交换 x 和 y 轴。
使用 facet_wrap() 也不是解决方案,因为时间序列丢失了。
我知道这是一种相当奇怪的图表。
实际上,我已经设法制作了这种图表。
1 号采样点Ochthebius quadriccollis种群动态
事实上,这并不是实现它的最优雅的方式,而且使用的代码当然可以改进。基本上我已经把图分解成十个单独的图了,都是用ggplot2制作的:其中九个是研究期间采集的九个样本对应的四个分组水平条的图,最后一个是简单形成的框架通过将 y 轴值全部设置为零 (0) 绘制的 x 和 y 轴。然后我使用拼凑包组装了所有东西。具体来说,我使用了 inset_element() 函数。通过这种方式,我通过反复试验将前 9 个条形图放在带有 x 和 y 轴的图表的顶部,逐步调整适当的参数以准确定位每个图表。
结果与我最初想要获得的结果非常接近。唯一缺少的是将水平条定位为从右到左运行,尽管我认为这并不容易实现。
有人可以提供任何其他想法来获得预期的图表吗?
任何问题或建议我都会通过我的电子邮件回答:jjsmeca@gmail.com。
非常感谢您的帮助和理解。
参考:
1 米尔登伯格,TK;TAYLOR, MH & M. WOLFF (2021) 热带渔业分析。包 'TropFishR' 版本 1.6.3。日期 2021-10-04。https://github.com/tokami/TropFishR,日期/出版时间 2021-10-04 08:10:02 UTC,106 页。
2 米尔登伯格,TK;TAYLOR, MH & M. WOLFF (2017) 应用:TropFishR:用于渔业分析的 R 包,具有长度频率数据。生态学与进化方法 8:1520–1527(DOI:10.1111/2041-210X.12791)(2017 年 3 月 1 日收到。2017 年 3 月 21 日接受。发布:2017 年 4 月 12 日)。
3 加亚尼洛, FC, Jr.;SPARRE, P. & D. PAULY (2005) FiSAT II。粮农组织-ICLARM 种群评估工具 II。修订版。用户指南。粮农组织计算机化信息系列(渔业),第 8 期,世界鱼类中心,联合国粮食及农业组织,罗马,168 页(包括软件 CD-ROM)(ISBN-10:92-5-105300- 6;ISSN:1020-3249)。
4 PERÁN, A.;VELASCO, J. & A. MILLÁN(1999 年)半干旱河流(西班牙东南部)中黄芩(蜉蝣目)的生命周期和二次生产。Hydrobiology 400: 187–194, 6 figs., 3 个表格(1998 年 8 月 25 日收到;1999 年 4 月 9 日修订版;1999 年 4 月 22 日接受)。
5 PERÁN, A.; 米伦,A.;VELASCO, J. & ML SUÁREZ (2000) 一种分析昆虫二次生产研究中无法区分的重叠群组的方法。Verhandlungen des Internationalen Verein Limnologie 27:989-992,3 图。(斯图加特,2000 年 10 月)(DOI:10.1080/03680770.1998.11901388)。
解决方案
推荐阅读
- ruby-on-rails - FactoryBot 获取工厂的可用特征
- unity3d - 在运行时更改 Sprite 材质未应用?
- python - 使用Python搜索在线数据库并下载图片
- google-chrome - 什么是 deepminer.min.js 突然出现在网络应用程序中?
- javascript - NodeJS google-cloud/vision:方法不执行任何操作
- firebase - firebase云函数如何调用清理函数
- python - 如何将 mrjob EMR 指向正确的 AWS 账户?我不断收到 ssh 密钥无效消息
- python - 从对话框中获取统计信息
- spring - 使用 Spring Security 的非线性角色层次结构
- android - Android 应用程序使用情况 (usagestats) 不显示覆盖绘制应用程序的条目,如 Facebook Messagener 聊天头