[英]Creating a loop in r for multiple box plots
我设计了一个实验,以观察自进餐以来血清标志物如何随时间变化。 我有一个由72个观测值和23o个变量组成的数据框,这称为BreakfastM。
有229个变量是血清标志物,还有1个是时间点。 观察结果是不同的样本
Iam正在寻找血清标志物(即胆固醇)如何随时间变化的数据趋势。 我创建了一个箱线图,可以很好地显示特定血清标志物相对于时间点的趋势
这是我使用的代码
boxplot((BreakfastM$Variable~BreakfastM$Timepoint))
通过在R中编写循环代码,是否有一种快速的方法可以针对时间点测试数据帧中的所有变量?
如果您只是想绘图,则使用tidyr
(和dplyr
)转换为长格式,然后使用ggplot2
进行绘图可能是最好的起点。
如果变量数量很少,则可以使用facet_wrap
来按尺寸划分facet_wrap
图。 因为您没有提供可重复的数据,所以我使用了mtcars
数据,将“ gear”替换为您的时间点,并仅限制了要比较的数值。 select
要使用的列,然后进行gather
,然后将其转换为长格式,然后ggplot
mtcars %>%
select(gear, mpg, disp:qsec) %>%
gather(Measure, Value, -gear) %>%
ggplot(aes(x = factor(gear)
, y = Value)) +
geom_boxplot() +
facet_wrap(~Measure
, scales = "free_y")
现在,有了229个变量,那将不是一个可读的图。 相反,您可能需要查看facet_multiple
的ggplus
,它将facet分布在多个页面上。 在这里,我使用它在每个“页面”中放置一个页面,您可以根据需要在查看器中查看或保存该页面。
首先,保存基本图(无刻面):
basePlot <-
mtcars %>%
select(gear, mpg, disp:qsec) %>%
gather(Measure, Value, -gear) %>%
ggplot(aes(x = factor(gear)
, y = Value)) +
geom_boxplot()
然后,将其用作facet_multiple
的参数:
facet_multiple(basePlot, "Measure"
, nrow = 1
, ncol = 1
, scales = "free_y")
将产生相同的面板如上述,但具有一个每页(改变nrow
和ncol
可以增加刻面的每页显示的数字)。
您还可以使用循环将许多图表写入工作目录中的图像文件。 让我们制作一个10列的矩阵,代表10个测量变量,每个变量均按3个因子水平划分:
data <- matrix(rnorm(150), nrow=15)
grps <- factor(c(rep("group1", 5), rep("group2", 5), rep("group3", 5)))
循环将每个箱形图写入名为var_1.png
, var_2.png
等的文件。这会将10 png
放入您的工作目录中。
for (i in 1:ncol(data)) {
png(file = paste("var_", i, ".png", sep=""))
boxplot(data[, i] ~ grps)
dev.off()
}
文件很小,您可以使用简单的图像查看器快速浏览它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.