【问题标题】:Histogram shows mostly zeros, but no zeros in data直方图主要显示零,但数据中没有零
【发布时间】:2020-01-28 00:50:51
【问题描述】:

我想生成我拥有的一些数据的直方图,但是使用基本plot(hist()) 或ggplot 直方图函数生成的图大多显示为零,计数对应于行数。实际数据中没有零,列是integer 类。将类更改为 numeric 似乎没有任何效果。

数据如下:

> head(lengths)
            gene  size
1  0610005C13Rik  7381
3  0610009B22Rik  3249
4  0610009E02Rik 12071
7  0610009L18Rik  2512
8  0610010F05Rik 68682
11 0610010K14Rik  2710
> dim(lengths)
[1] 25230     2
> summary(lengths)
            gene            size          
 0610005C13Rik:    1   Min.   :       20  
 0610009B22Rik:    1   1st Qu.:     4082  
 0610009E02Rik:    1   Median :    13768  
 0610009L18Rik:    1   Mean   :   177473  
 0610010F05Rik:    1   3rd Qu.:    37702  
 0610010K14Rik:    1   Max.   :163098416  
 (Other)      :25224

根据 UCSC 的 refFLat 表,这是一个非常简单的表格,由小鼠基因组中每个基因的转录长度组成。 summary() 清楚地表明大小列中没有零。但是,plot(hist(lengths$size)) 或 ggplot(lengths) + geom_histogram(aes(size)) 将绝大多数值显示为零 - 并且计数似乎对应于数据中的条目数。

以下是基函数和ggplot 直方图函数的输出,代码如下:

> plot(hist(lengths$size))
> plot(hist(subset(lengths, size>0)$size))
> ggplot(lengths, aes(size)) + geom_histogram() + ggtitle("Lengths")
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
> ggplot(subset(lengths, size>0), aes(size)) + geom_histogram() + ggtitle("Lengths, subset size>0")
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

base plot, subset size>0 ggplot ggplot, subset size>0

抱歉链接,我是第一次发帖,没有足够的声誉来添加内嵌图片。

如您所见,即使绘制的数据子集不包含零,它仍会将数字的总数输出为零!我不明白如何解决这种行为,这对我来说完全是疯狂的。我确定我犯了一个简单的错误,但我似乎无法弄清楚。任何帮助将不胜感激。

再次,提前感谢任何人对我的难题的帮助。

编辑

我是个白痴,这只是超出了规模。感谢@Axeman 和@user26050。这是 log10 比例的绘图,使用以下代码:

> ggplot(lengths, aes(log10(size))) + geom_histogram() + ggtitle("Log10(size)")

【问题讨论】:

  • 柱状图的柱状图。它没有显示为 0 的实际值,仅显示当前刻度上接近 0 的值。你的比例上升到 10^8,这是非常大的。您的大多数值显然比这要小得多。由于ggplot 默认使用 30 个 bin,第一个 bin 上升到大约 10^8 / 30,所以从 0 到 300 万左右。你 75% 的价值甚至不超过 40,000,更不用说 300 万了。
  • ....所以可以看看hist(log(lengths$size))
  • @Axeman 和 user26050 都是对的,我现在觉得很愚蠢。在 log10 中绘图向我展示了我想要的内容。
  • 见?scale_x_log10。

标签: r ggplot2 histogram


【解决方案1】:

如果你能提供数据框就太好了。然后人们可以测试他们的答案并在这里发布他们的代码。 但是从您发布的内容来看,问题非常明显。

直方图通过 bin 显示某个范围内的 number 个观察值。您有 25230 个观察值,我们看到在第一个 bin 中计数了超过 25000 个。所以其他箱子总共包含不到 230 个观测值,而且它们非常小——我们看不到这种规模。

给你的建议:
1. 使用更多垃圾箱。 ggplot 试图帮助你:stat_bin() using bins = 30. Pick better value with binwidth。您可以在geom_histogram 中添加binwidth= 或bins= 来选择参数以获得最佳可视化效果。例如,试试geom_histogram(bins=1000)。
2. 使用密度图。只需使用geom_density() 而不是geom_histogram()。
3. 可能你只是想要一些其他的情节?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多