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

时间:2016-11-01 18:37:28

标签: r loops iplots

我设计了一项实验,了解自进食以来血清标志物随时间的变化情况。我有一个由72个观察和23个变量组成的数据框,称为BreakfastM。

有229个变量是血清标记,1个是时间点。观察结果是不同的样本

Iam寻找血清标志物(即胆固醇)如何随时间点变化的数据趋势。我已经创建了一个箱线图,它可以很好地显示特定血清标记物中与时间点相关的趋势

这是我使用的代码

boxplot((BreakfastM$Variable~BreakfastM$Timepoint))

是否可以通过在R中编写循环代码来快速测试数据帧中的所有变量?

2 个答案:

答案 0 :(得分:2)

如果您只想绘制地图,使用tidyr(和dplyr)转换为长格式,然后使用ggplot2进行绘图可能是最好的起点。

如果您只有少量变量,则可以使用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")

enter image description here

现在,有229个变量,这不是一个可读的情节。相反,您可能希望查看来自facet_multiple的{​​{1}},它会在多个页面上传播分面。在这里,我用它来放置一个"页面"您可以在查看器中查看,也可以根据需要进行保存。

首先,保存基础图(没有刻面):

ggplus

然后,将其用作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可以增加每页显示的构面数)。

答案 1 :(得分:1)

您还可以使用循环将多个绘图写入工作目录中的图像文件。让我们做一个10列矩阵表示10个测量变量,每个变量分为3个因子级别:

this.d( "facebookOAuthLogin() - starts" );
this.fbProvider.login().then(
    ( loginResponse: { status: string, authResponse: any, accessToken: string, expiresIn: string, session_key: string, sig: string, userID: string } ) =>
    {
        this.d( "facebookOAuthLogin() - fbProvider.login() succeeded" );
        Config.config.sessionToken = loginResponse.authResponse.accessToken;
        this.fbProvider.getCurrentUserProfile().then(
            ( profileData : { email: string, name: string } ) =>
            {
                this.d( "facebookOAuthLogin() - fbProvider.getCurrentUserProfile() succeeded" );
                Config.config.user_email = profileData.email;
                Config.config.user_name = profileData.name;
                this.fbProvider.getUserPicture().then(
                    ( pictureData : { data:{ is_silhouette: boolean, url: string, width: number, height: number } } ) =>
                        {
                            this.d( "facebookOAuthLogin() - fbProvider.getUserPicture() succeeded" );
                            // this.facebook_picture_url = pictureData.data.url;
                            // this.facebook_picture_is_silhouette = pictureData.data.is_silhouette;
                            if( pictureData.data.is_silhouette || pictureData.data.url == null )
                            {
                                this.d( "facebookOAuthLogin() - pictureData.data.url == null" );
                                Config.config.jpegBase64Data = null;
                                this.afterFacebookLogin();
                            }
                            else
                            {
                                this.d( "facebookOAuthLogin() - pictureData.data.url != null" );
                                ImageStore.readToData( pictureData.data.url ).then(
                                    dataBase64 =>
                                    {
                                        this.d( "facebookOAuthLogin() - facebook picture read successfully" );

循环将每个箱图写入名为data <- matrix(rnorm(150), nrow=15) grps <- factor(c(rep("group1", 5), rep("group2", 5), rep("group3", 5))) var_1.png等的文件。这将在您的工作目录中放置10个var_2.png

png

文件非常小,您可以使用简单的图像查看器快速浏览它们。

enter image description here