[英]Creating multiple plots with filter or from list - r
我有一个包含 453 行和以下列的数据框:
library(data.table)
library(dplyr)
library(ggplot2)
phrase onsets IOI Per Ratio PerMax Onset_N
<dbl> <dbl> <dbl> <dbl> <chr> <dbl> <dbl>
1 1 106. 0.413 266 1.55 3.06 1
2 1 106. 0.413 266 0.51 3.06 2
3 1 106. 0.136 266 0.86 3.06 3
4 1 106. 0.23 266 1.12 3.06 4
5 1 107. 0.299 266 1.89 3.06 5
6 1 107. 0.503 266 0 3.06 6
7 1 107. 0.503 266 0 3.06 6
8 2 108. 0.517 162 0.99 8.73 1
9 2 108. 0.161 162 0.92 8.73 2
10 2 108. 0.149 162 0.94 8.73 3
11 2 108. 0.152 162 1.12 8.73 4
我想创建多个图,以便具有相同phrase
编号的条目在同一个图中。 这意味着 1-7 将有一个图,8-11 将有一个图,等等。对于所有图,X 是Ratio
列,Y 是Onset_N
列。
这是一个情节的例子:
plot1 <- data %>%
filter(phrase == 1)%>%
ggplot(aes(Onset_N, Ratio))+
geom_point()+
labs(x = "onsets", y = "Ratio onset vs. per", title = "1")
plot1
但是,我有大量数据 - 短语从 1:60 开始。 有没有办法创建一个循环,其中过滤器和标题将从 1:60 开始?
另一种方法是创建一个列表
listphrases <- split(data, data$phrase)
listphrases <- data.table(listphrases)
但是,我被困在如何从列表中绘制我需要的信息。
有什么建议么? 当然,用一个代码保存所有图像也很方便。
先感谢您
您可以创建一个生成绘图的函数,例如get_phrase_plot()
,然后通过phrase
应用该函数。 这是data.table
中的一个示例
get_phrase_plot <- function(dt,phrase) {
ggplot(dt,aes(Onset_N, Ratio))+
geom_point()+
labs(x = "onsets", y = "Ratio onset vs. per", title = phrase)
}
phrase
组; 我还使用特殊的.BY
将短语值作为字符串传递给labs()
的title
参数setDT(data)
data[,.(plot = list(get_phrase_plot(.SD, .BY))), phrase]
输出是一个数据表。
phrase plot
<int> <list>
1: 1 <gg[9]>
2: 2 <gg[9]>
有很多方法可以保存这些地块; 一种方便的方法是将参数save=F
添加到函数签名中,如果将其设置为T
,则将保存绘图。
get_phrase_plot <- function(dt,phrase, save=F) {
plt = ggplot(dt,aes(Onset_N, Ratio))+
geom_point()+
labs(x = "onsets", y = "Ratio onset vs. per", title = phrase)
if(save) {
ggsave(filename=paste0("plot_",phrase,".png"), height=8, width=14)
}
plt
}
现在,当您调用该函数时,您可以传递save=T
,您将获得每个组的一个 .png 图(即每个phrase
)
data[,.(plot = list(get_phrase_plot(.SD, .BY, save=T))), phrase]
输出是相同的,但您还保存了 .png 文件:
> list.files(pattern="plot_\\d")
[1] "plot_1.png" "plot_2.png"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.