r - 如何在R中的一张图中放置多条时间序列线?

标签 r time-series

我有一些数据,我正在研究种子发芽率并比较 2 个不同的处理阶段和种子来源。 2 个阶段中的每个阶段都有多个组。我试图将结果绘制为时间序列,或者至少看起来类似于时间序列。我的数据如下所示:

<表类=“s-表”> <标题> 来源 第一阶段 第 2 阶段 第 1 天 第 2 天 第 3 天 <正文> 1 一个 X 4 4 8 1 一个 是 0 17 17 1 一个 Z 5 10 15 1 B X 2 4 6 1 B 是 1 2 3 1 B Z 0 5 8

我尝试将数据转换为长格式并使用pivot_longer和names_to函数对日期列进行分组,然后尝试使用以下代码进行绘图:


ggplot(df1, aes(x= days_num, y = germination, group=phase 1))+
  geom_line(aes(color=phase 2)) +
  facet_grid(source~.)

它给了我一个像这样的图表:R generated graph

下图符合我希望的样子:time series graph

我希望能够在图表中并排显示不同的来源,然后将我的第 1 阶段 (A - XYZ) 线作为一个图表,将 (B - XYZ) 线分开。

谁能帮忙解决这个问题吗?

最佳答案

阶段 1 映射到组时,您将 2 个值映射到 3 个不同的阶段 2 中的每一个。将阶段 2 映射到颜色,并按阶段 1 对图进行分面。

df1 <- "Source  'Phase 1'   'Phase 2'   'Day 1'     'Day 2'     'Day 3'
1   A   X   4   4   8
1   A   Y   0   17  17
1   A   Z   5   10  15
1   B   X   2   4   6
1   B   Y   1   2   3
1   B   Z   0   5   8"
df1 <- read.table(text = df1, header = TRUE, check.names = FALSE)

suppressPackageStartupMessages({
  library(ggplot2)
  library(dplyr)
  library(tidyr)
})

df1 %>%
  pivot_longer(starts_with("Day"), names_to = "day_num", values_to = "germination") %>%
  mutate(day_num = stringr::str_extract(day_num, "\\d+"),
         day_num = as.integer(day_num)) %>%
  ggplot(aes(day_num, germination, color = `Phase 2`)) +
  geom_line() +
  labs(x = "Day", y = "Germination") +
  facet_grid(rows = vars(`Phase 1`)) +
  theme_bw()

创建于 2023-01-03 reprex v2.0.2

注意:上图未使用Source,因为发布的数据示例只有一个来源。如果有更多来源,可能可以选择使用

facet_grid(`Phase 1` ~ Source)

关于r - 如何在R中的一张图中放置多条时间序列线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74988944/

相关文章:

python - 如何将从 csv 文件导入 python 的数据转换为时间序列?

r - STL .series 中的错误不是周期性的

python - 在基于时间序列的负载预测问题中,如何处理缺失值

r - 更改堆叠 ggplot 图例中的几何顺序

r - ggplot2 中的希腊字符适用于 png 但不适用于 svg 文件格式

r - prop.test 使用什么公式?

time-series - 将随机森林用于时间序列数据集

r - 使用 `midasr` 包 : Inclusion of new high-frequency value 进行预测

r - 在r中查找wav文件的持续时间

read_excel() 和 lapply()