【问题标题】:Plot specific bins in histogram in r在 r 的直方图中绘制特定的 bin
【发布时间】:2016-02-08 20:27:24
【问题描述】:

我的数据如下所示:

  > data1415$Lön_utv
 [1]  2.500000  2.499134 11.979167  2.606635  2.299856  2.300086  2.399993  2.499763  2.499134  5.000000
[11]  2.499134  3.213068  3.497202  6.666667  3.467406  2.493373  3.976479  2.501996  2.499356  3.286318
[21]  2.503582  2.503582  2.499356  2.499356  2.499356  2.499356  2.459016  2.505516  2.499356  2.504103
[31]  2.503582  2.459016  2.503582  2.544523  5.660377  2.501949  2.503966  2.499332  2.358491  3.113852
[41]  2.499356  2.499332  2.499356  2.459016  2.499332  2.941176  2.499356  2.499356  2.499356  2.499356
[51]  3.400695  6.512312  2.504863  2.499356  2.499356  6.516168  2.503966  2.503582  3.400695  2.358491
[61]  3.899955  7.525569  2.503582  2.499236  2.283105  2.499332  2.941176  2.499356  2.503582  6.335204
[71]  5.216359  2.501495  5.936073  2.503966  2.358491  7.152135  6.072188  2.502615  6.063219 10.193115
[81]  2.504279  2.503582  2.501231  2.505728  2.500144  3.658113  2.502452  2.941176  5.000000  2.500818
[91]  2.499236  8.054799  2.500144  1.672703  2.941176  2.162162  6.072188  2.941176  3.251276  2.941176
[101]  2.501231  2.500818  7.397407  2.162162  4.860217  2.941176  2.162162  2.162162  2.162162  2.501361

如果我剪切数据,我会得到:

> c2 <- cut(data1415$Lön_utv, breaks = c(0:8, 20), include.lowest=TRUE)
> table(c2)
c2
[0,1]  (1,2]  (2,3]  (3,4]  (4,5]  (5,6]  (6,7]  (7,8] (8,20] 
 0      1     79     11      1      5      7      3      3 

我想创建一个包含 0-1、1-2、2-3 等分箱的直方图。我的问题是我希望 x 轴的宽度不超过 8。这将排除所有高于 8 的值,所以我希望最右边的 bin 包含所有高于 8 的值。我尝试过类似

hist(data1415$Lön_utv, breaks = c(0:8, 20), right=FALSE)

但无法弄清楚如何使 x 轴不超过 8 并且仍然获得具有上述所有值的“顶部”bin。

【问题讨论】:

  • 我认为您需要一个条形图,直方图的每个定义都有一个连续的 x 轴。
  • 最简单的方法:barplot(table(c2))
  • 谢谢!现在我正在努力在 y 轴上获得百分比而不是没有观察值,你知道吗?

标签: r histogram bin


【解决方案1】:

正如 cmets 中所说,您需要使用 bin 绘制条形图。假设我们的数值变量在 'value' 中,我们可以计算 bin:

dat$bin <- cut(dat$value, breaks=c(0:8,20))

然后使用 ggplot,我们可以绘制计数:

ggplot(dat, aes(x=bin)) + geom_bar()

要获得百分比,我们可以让 ggplot 为我们计算百分比。我们确实需要为其添加一个百分比刻度。为避免混淆,请将轴从 0 变为 100%。

ggplot(dat, aes(x=bin)) + 
  geom_bar(aes(y=..count../sum(..count..))) + 
  scale_y_continuous(limits=c(0,1),labels=scales::percent)

【讨论】: