【发布时间】: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。