我有一个数据表,其中一列代表每个研究对象(行)的实验室值.
我想生成一系列直方图,显示每个实验室测试(即列)的值分布.理想情况下,每组实验室值具有不同的bin宽度(一些是整数,范围为数百,有些是数字,范围为2-3).
我怎么做?
ali*_*ire 22
如果组合tidyr和ggplot2包,则可以使用facet_wrap快速设置data.frame中每个变量的直方图.
您需要将数据重新整形为长形式tidyr::gather,因此您拥有key和value类似的列:
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_wrap按key列分隔:
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/