首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用'apply‘在一系列生成的曲线图上自动放置标题

如何使用'apply‘在一系列生成的曲线图上自动放置标题
EN

Stack Overflow用户
提问于 2020-05-14 20:23:40
回答 2查看 95关注 0票数 1

为了进行数据分析,我正在从SPSS切换到R,并且我正在尝试编写一个可以用于大多数未来分析的scrpit。为了检验正态性,我想画出每个连续变量的直方图、QQ图和下降图。

为此,我希望R生成数据集中所有连续变量的as图,并以变量为标题。

我设法做到了这一点,首先选择所有数值变量并将它们存储为数据。

接下来,我尝试使用apply来生成所有列的qqplot。我设法做到了,但不幸的是,即使经过一天多的努力和尝试,我也没有成功地获得正确的标题。我需要知道如何编写代码来自动将变量(x)名称作为标题。有人知道怎么解决这个问题吗?

这就是我所做的,但根本不起作用:

代码语言:javascript
复制
apply(data.numerical, 2, function(x) {ggqqplot(x, title=colnames(data.numerical)[x])})

提前感谢!

耶罗恩

EN

回答 2

Stack Overflow用户

发布于 2020-05-14 21:05:05

欢迎来到Stack Overflow和R!首先,我将提供一个解决方案,并提供一些关于将来在Stack Overflow上提问的提示。然后我会解释为什么你的尝试没有成功。

解决方案

下面是我的方法,在某些方面与您尝试的方法没有太大不同:

代码语言:javascript
复制
## Specify non-base packages needed
library(ggpubr)
## Generate example data
set.seed(123)
data.numerical <- data.frame(a = rnorm(100), b = rnorm(100))
## Make QQ plot for each column with the column's name as the title
sapply(names(data.numerical), function(x) {
    print(ggqqplot(data = data.numerical, x = x, title = x))
})
## Or, equivalently
plots <- lapply(names(data.numerical), function(x) {
    ggqqplot(data = data.numerical, x = x, title = x)
})
plots[[1]]
plots[[2]]

以下是结果;您可以看到这些图的名称是恰当的:

注意我在绘制代码之前放在代码中的东西,指定了我正在使用的包,并为其他人提供了一种简单的方法来复制我的数据。在将来提出问题时,请提供这些东西;它们给我们提供了我们所称的最小可重复性示例,这有助于我们帮助您。

那么为什么我的尝试没有成功呢?

如果我们查看help("ggqqplot"),我们将看到该函数期望指定data以及绘制列x。因此,我没有对列执行apply()操作,而是对名称执行sapply()操作,以便以这种方式指定x。这对title参数也有帮助;因为我在名称上使用sapply(),所以可以直接将它们提供给title参数。

最重要的是,colnames(data.numerical)[x]并没有做你认为它正在做的事情。在您尝试的上下文中,x不是一个列索引,而是您数据框的一整列。因此,它不会像您所期望的那样设置列名的子集。

票数 3
EN

Stack Overflow用户

发布于 2020-05-14 21:30:09

欢迎!来强化@duckmayer中的一些观点。

  1. 始终告诉我们有关您的数据的更多信息
  2. 从某人遇到您的问题的态度开始,我们提供了相应的解决方案。包括针对expss用户的(提示,提示)。不要重复发明轮子。

由于我碰巧有written a function来检查单变量发行版,所以我将使用它。没有人说它是最好的,但它就在这里。在实际情况中,您会发现dplyr::select_if使得从数据集中只选择数值变量变得很容易

代码语言:javascript
复制
library(dplyr)
library(purrr)
library(CGPfunctions)

playdata <- mtcars %>% select(hp, mpg, qsec)
titlevar <- names(playdata)
playdata %>% purrr::map2(.y = titlevar, ~ SeeDist(.x, whatplots = "d", title = .y))
#> Warning: There are 7 modal values displaying just the first 3

代码语言:javascript
复制
#> $hp
#> ------------------------------------------------------------------------------ 
#> .x
#> 
#>   length       n    NAs  unique      0s    mean  meanCI'
#>       32      32      0      22       0  146.69  121.97
#>           100.0%   0.0%            0.0%          171.41
#>                                                        
#>      .05     .10    .25  median     .75     .90     .95
#>    63.65   66.00  96.50  123.00  180.00  243.50  253.55
#>                                                        
#>    range      sd  vcoef     mad     IQR    skew    kurt
#>   283.00   68.56   0.47   77.10   83.50    0.73   -0.14
#>                                                        
#> lowest : 52.00, 62.00, 65.00, 66.00 (2), 91.00
#> highest: 215.00, 230.00, 245.00 (2), 264.00, 335.00
#> 
#> ' 95%-CI (classic)
#> 
#> 
#> $mpg
#> ------------------------------------------------------------------------------ 
#> .x
#> 
#>   length       n    NAs  unique     0s   mean  meanCI'
#>       32      32      0      25      0  20.09   17.92
#>           100.0%   0.0%           0.0%          22.26
#>                                                      
#>      .05     .10    .25  median    .75    .90     .95
#>    12.00   14.34  15.43   19.20  22.80  30.09   31.30
#>                                                      
#>    range      sd  vcoef     mad    IQR   skew    kurt
#>    23.50    6.03   0.30    5.41   7.38   0.61   -0.37
#>                                                      
#> lowest : 10.40 (2), 13.30, 14.30, 14.70, 15.00
#> highest: 26.00, 27.30, 30.40 (2), 32.40, 33.90
#> 
#> ' 95%-CI (classic)
#> 
#> 
#> $qsec
#> ------------------------------------------------------------------------------ 
#> .x
#> 
#>   length       n    NAs  unique     0s   mean  meanCI'
#>       32      32      0      30      0  17.85   17.20
#>           100.0%   0.0%           0.0%          18.49
#>                                                      
#>      .05     .10    .25  median    .75    .90     .95
#>    15.05   15.53  16.89   17.71  18.90  19.99   20.10
#>                                                      
#>    range      sd  vcoef     mad    IQR   skew    kurt
#>     8.40    1.79   0.10    1.42   2.01   0.37    0.34
#>                                                      
#> lowest : 14.50, 14.60, 15.41, 15.50, 15.84
#> highest: 19.90, 20.00, 20.01, 20.22, 22.90
#> 
#> ' 95%-CI (classic)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61797269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档