如何为表格的每一列生成直方图?

vel*_*oen 9 r ggplot2

我有一个数据表,其中一列代表每个研究对象(行)的实验室值.

我想生成一系列直方图,显示每个实验室测试(即列)的值分布.理想情况下,每组实验室值具有不同的bin宽度(一些是整数,范围为数百,有些是数字,范围为2-3).

我怎么做?

ali*_*ire 22

如果组合tidyrggplot2包,则可以使用facet_wrap快速设置data.frame中每个变量的直方图.

您需要将数据重新整形为长形式tidyr::gather,因此您拥有keyvalue类似的列:

library(tidyr)
library(ggplot2)
# or `library(tidyverse)`

mtcars %>% gather() %>% head()
#>   key value
#> 1 mpg  21.0
#> 2 mpg  21.0
#> 3 mpg  22.8
#> 4 mpg  21.4
#> 5 mpg  18.7
#> 6 mpg  18.1
Run Code Online (Sandbox Code Playgroud)

使用它作为我们的数据,我们可以映射value为我们的x变量,并用于facet_wrapkey列分隔:

ggplot(gather(mtcars), aes(value)) + 
    geom_histogram(bins = 10) + 
    facet_wrap(~key, scales = 'free_x')
Run Code Online (Sandbox Code Playgroud)

scales = 'free_x'除非您的数据具有相似的规模,否则这是必要的.

您可以替换bins = 10任何评估为数字的内容,这可能允许您通过一些创造力单独设置它们.或者,您可以设置binwidth,这可能更实用,具体取决于您的数据.无论如何,装箱将需要一些技巧.


小智 7

如果您的数据框名为"df",并且您希望生成从第2列开始的直方图(如果第1列是您的id),则可以在for循环中生成类似于此类的图:

for (col in 2:ncol(df)) {
    hist(df[,col])
}
Run Code Online (Sandbox Code Playgroud)

hist函数自动计算合理的bin宽度,或者您可以通过添加breaks参数为所有直方图指定固定数量的bin:

hist(df[,col], breaks=10)
Run Code Online (Sandbox Code Playgroud)

如果您使用RStudio,您的所有绘图将自动保存在绘图窗格中.如果没有,您需要将每个绘图保存到循环内的单独文件中,如下所述:http://www.r-bloggers.com/automatically-save-your-plots-to-a-folder/

  • 您可以添加“par(mfrow = c(x, y))”以在一张图中显示它们。或者也许让代码以某种方式等待,以便用户有时间查看绘图并继续下一步。或者也许添加一个睡眠计时器来在预定义的时间段内显示每个图像。或者,只需使用类似于 @alistaire 所做的事情。:) (2认同)