首页 > 解决方案 > 如何在 R 或 python 中绘制时间序列上的聚集水平条形图

问题描述

我是 R 的新手,但我一直在寻找一个图表,在 R 中的时间序列上显示分组(或集群)水平条。我一直在网上研究,但一直没有能够找到这种图表。我知道它可以做到,因为在 TropFishR 1 2包中有一个类似于我打算做的图表,如下所示:

2019 拖网渔船数据:雄性(TropFishR 包)

这些图表显示了鱼类或贝类渔业的长度频率数据的时间序列,以评估其种群。当研究人员只有正在研究的海洋生物种群的生物体长度的数据时,这种可视化数据的方式是合适的。这些类型的图表已使用 FiSAT 3软件用于水生昆虫种群,如 Perán 等人,1999 4和 2000 5。见下图:

图 1 来自 Chícamo 溪流的 C. luctuosa 幼虫的月度大小-频率直方图

在这种情况下,它是一种水生甲虫种群,已经确定了四个水生生命阶段:幼虫阶段 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 包,我设法获得了以下图表:

ggplot2 在 x 轴上的时间序列上的聚集垂直条形图

但是,在此图表中,条形显示为垂直而不是水平。

使用 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)。

标签: pythonrtimeseries

解决方案


推荐阅读