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

R 如何为表格的每一列生成直方图?,r,ggplot2,R,Ggplot2,我有一个数据表,其中一列表示每个研究对象(行)的实验室值 我想生成一系列直方图,显示每个实验室测试的值分布(即列)。理想情况下,每组实验室值都有不同的存储单元宽度(有些是范围为数百的整数,有些是范围为2-3的数字) 我该怎么做呢?如果您的数据帧名为“df”,并且您希望从第2列开始生成直方图(如果第1列是您的id),您可以使用类似的方法在for循环中生成绘图: hist函数会自动计算合理的存储箱宽度,也可以通过添加breaks参数为所有直方图指定固定数量的存储箱: hist(df[,col], b

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

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


我该怎么做呢?

如果您的数据帧名为“df”,并且您希望从第2列开始生成直方图(如果第1列是您的id),您可以使用类似的方法在for循环中生成绘图:

hist函数会自动计算合理的存储箱宽度,也可以通过添加breaks参数为所有直方图指定固定数量的存储箱:

hist(df[,col], breaks=10)

如果使用RStudio,所有绘图将自动保存在绘图窗格中。如果没有,则需要将每个绘图保存到循环内的单独文件中,如下所述:

如果将
tidyr
ggplot2
包组合在一起,则可以使用
facet\u wrap
为data.frame中的每个变量创建一组快速的直方图

您需要使用
tidyr::gather
将数据重塑为长格式,因此您有
key
value
列,如下所示:

library(tidyr)
图书馆(GG2)
#或“图书馆(tidyverse)”`
mtcars%%>%GARGET()%%>%head()
#>关键值
#>1英里每加仑21.0英里
#>2英里每加仑21.0英里
#>3英里每加仑22.8英里
#>4英里每加仑21.4英里
#>5英里每加仑18.7英里
#>6英里每加仑18.1英里
使用此数据,我们可以将
映射为x变量,并使用
facet\u wrap
列分隔:

ggplot(聚集(mtcars)、aes(值))+
几何图形柱状图(箱数=10)+
面_包裹(~key,scales='free_x')

scales='free_x'
是必需的,除非您的数据都是类似的比例


您可以用任何计算结果为数字的东西来替换
bins=10
,这样您就可以创造性地对它们进行个别设置。或者,您可以设置
binwidth
,这可能更实用,具体取决于数据的外观。无论如何,binning需要一些技巧。

,尽管它有点复杂。我真的很感谢你的帮助,我真的误解了刻面是如何工作的。我将使用您发布的BitWidth文章,因为它们在值之间差异很大。非常感谢。太好了,谢谢。自动绘图保存增加了我的理解。您可以添加
par(mfrow=c(x,y))
以在一个绘图中显示它们。或者让代码以某种方式等待,以便用户有时间查看绘图并继续下一步。或者添加一个睡眠计时器,在预定义的时间段内显示每个图像。或者,使用类似于@alistaire所做的事情:我建议添加
main=names(df[col])
作为hist函数的附加参数。它会在每个柱状图上标记有问题的列的名称。我刚刚看到了。它允许您按特定列快速绘制直方图,看起来您可以为每列设置不同的分隔符。
hist(df[,col], breaks=10)