我有4种不同矩阵长度的列表。我希望将它们绘制为时间序列集,如下面的示例所示,只是x轴是运行数字(例如router-outlet
),y轴是矩阵值(例如1:75
)。
(https://homepage.divms.uiowa.edu/~luke/classes/STAT4580/timeseries_files/figure-html/unnamed-chunk-39-2.png)。
我知道ggplot2不处理列表,所以知道如何前进吗?
脚本:
sin(1:75)
答案 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")
说明:我们首先将所有矩阵转换为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)