我有一个数据表,其中有一列表示每个研究对象的实验室值(行)。
我想生成一系列直方图,显示每个实验室测试的值的分布(即列)。理想情况下,每组lab值都有不同的bin宽度(有些是整数,范围是数百,有些是数值,范围是2-3)。
我该怎么做?
发布于 2016-02-13 06:37:35
如果将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使用它作为我们的数据,我们可以将value映射为我们的x变量,并使用facet_wrap来分隔key列:
ggplot(gather(mtcars), aes(value)) +
geom_histogram(bins = 10) +
facet_wrap(~key, scales = 'free_x')

除非您的数据都是类似规模的,否则scales = 'free_x'是必需的。
您可以将bins = 10替换为任何可计算为数字的值,这可能允许您以一定的创造性单独设置它们。或者,您可以设置binwidth,这可能更实用,这取决于您的数据的外观。无论如何,装箱需要一些技巧。
发布于 2016-02-13 06:36:40
如果您的数据框名为"df“,并且您想要生成从第2列开始的直方图(如果第1列是您的id),则可以在for循环中生成绘图,如下所示:
for (col in 2:ncol(df)) {
hist(df[,col])
}hist函数自动计算合理的柱状图宽度,或者您可以通过添加breaks参数为所有直方图指定固定数量的柱状图:
hist(df[,col], breaks=10)如果使用RStudio,所有绘图将自动保存在绘图窗格中。如果没有,则需要将每个绘图保存到循环内的一个单独文件中,如下所述:http://www.r-bloggers.com/automatically-save-your-plots-to-a-folder/
https://stackoverflow.com/questions/35372365
复制相似问题