繁体   English   中英

在R中为多个箱形图创建循环

[英]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_multipleggplus ,它将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")

将产生相同的面板如上述,但具有一个每页(改变nrowncol可以增加刻面的每页显示的数字)。

您还可以使用循环将许多图表写入工作目录中的图像文件。 让我们制作一个10列的矩阵,代表10个测量变量,每个变量均按3个因子水平划分:

data <- matrix(rnorm(150), nrow=15)
grps <- factor(c(rep("group1", 5), rep("group2", 5), rep("group3", 5)))

循环将每个箱形图写入名为var_1.pngvar_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM