使用ggplot2从列表中绘制数据

时间:2019-02-03 20:30:52

标签: r ggplot2

我有4种不同矩阵长度的列表。我希望将它们绘制为时间序列集,如下面的示例所示,只是x轴是运行数字(例如router-outlet),y轴是矩阵值(例如1:75)。

enter image description herehttps://homepage.divms.uiowa.edu/~luke/classes/STAT4580/timeseries_files/figure-html/unnamed-chunk-39-2.png)。

我知道ggplot2不处理列表,所以知道如何前进吗?

脚本:

sin(1:75)

2 个答案:

答案 0 :(得分:3)

像这样吗?

library(tidyverse)
map_dfr(myList, ~as.data.frame(.x), .id = "id") %>%
    group_by(id) %>%
    mutate(n = 1:n()) %>%
    ungroup() %>%
    mutate(id = as.factor(id)) %>%
    ggplot(aes(n, V1, colour = id)) +
    geom_line() +
    facet_wrap(~ id, scales = "free")

enter image description here

说明:我们首先将所有矩阵转换为data.frame,然后将所有行绑定到一个单独的data.frame中,其中包括一个从id名称派生的list;然后我们可以用id为行编号,然后绘制行数与单列的关系。


这是相同的代码“ un-piped”和“ uglified”

library(tidyverse)

# Convert from list of matrices to long data.frame
df.long <- map_dfr(myList, ~as.data.frame(.x), .id = "id")

# Group by id
df.long <- group_by(df.long, id)

# Add row number (per group)
df.long <- mutate(df.long, n = 1:n())

# ungroup
df.long <- ungroup(df.long)

# Make sure id is a factor
df.long <- mutate(df.long, id = as.factor(id))

# (gg)plot
ggplot(df.long, aes(n, V1, colour = id)) +
    geom_line() +
    facet_wrap(~ id, scales = "free")

很容易看出%>%如何获取左侧对象并将其用作右侧函数的第一个参数;因此f(x)将变成x %>% f()

答案 1 :(得分:2)

library(tidyverse)
enframe(myList) %>%
  unnest() %>%
  group_by(name) %>%
  rowid_to_column() %>%
  ungroup() %>%

  ggplot(aes(rowid, value)) + 
  geom_line() + 
  facet_wrap(~name, scales = "free")

enter image description here