【问题标题】:How do I generate a histogram for each column of my table?如何为表格的每一列生成直方图?
【发布时间】:2016-02-12 21:19:24
【问题描述】:

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

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

我该怎么做?

【问题讨论】:

标签: r ggplot2


【解决方案1】:

如果您将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

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

ggplot(gather(mtcars), aes(value)) + 
    geom_histogram(bins = 10) + 
    facet_wrap(~key, scales = 'free_x')

scales = 'free_x' 是必需的,除非您的数据都具有相似的规模。

您可以将bins = 10 替换为任何可以计算为数字的东西,这可以让您通过一些创意来单独设置它们。或者,您可以设置binwidth,这可能更实用,具体取决于您的数据是什么样的。无论如何,分箱需要一些技巧。

【讨论】:

【解决方案2】:

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

for (col in 2:ncol(df)) {
    hist(df[,col])
}

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

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

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

【讨论】:

  • 太好了,谢谢。自动绘图保存对我的理解很有帮助。
  • 您可以添加par(mfrow = c(x, y)) 以将它们显示在一个图中。或者也许让代码以某种方式等待,以便用户有时间查看情节并继续下一步。或者,也许添加一个睡眠定时器以在预定义的时间段内显示每个图像。或者,只需使用类似于 @alistaire 所做的事情。 :)
  • 我建议将main = names(df[col]) 作为附加参数添加到 hist 函数中。它将用相关列的名称标记每个直方图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 2021-08-16
相关资源
最近更新 更多