6

我有以下数据

 dati <- read.table(text="
        class     num
    1     0.0   63530
    2     2.5   27061
    3     3.5   29938
    4     4.5   33076
    5     5.6   45759
    6     6.5   72794
    7     8.0  153177
    8    10.8  362124
    9    13.5  551051
    10   15.5  198634
  ")

我想生成一个带有可变大小箱的直方图,以便每个条形的面积反映每个箱的总数量(num)。我试过了

bins <- c(0,4,8,11,16)
p <- ggplot(dati) +
  geom_histogram(aes(x=class,weight=num),breaks = bins)

但是,这会产生一个直方图,其中每个条形的长度等于每个 bin 的总数量。因为 bin 宽度是可变的,所以面积与数量不成比例。我无法在ggplot2中解决这个看似简单的问题。谁能帮我?

4

2 回答 2

5

认为您正在寻找密度图 -这个密切相关的问题有大部分答案。你打电话y = ..density..进来geom_histogram()

这是有效的,因为stat_bin(recallgeom_histogram()geom_bar()+ stat_bin(),并stat_bin()构造了一个包含列count和的数据框density。因此调用y = ..density..会拉出右列以获取密度,而默认 (counts) 就像你调用y = ..count...

##OP's code
ggplot(dati) +  geom_histogram(aes(x=class, weight=num),
 breaks = bins)

计数直方图

##new code (density plot)
ggplot(dati) +  geom_histogram( aes(x=class,y = ..density.., weight=num),
 breaks = bins, position = "identity")

密度直方图

您可以在ggplot2 在线帮助页面中找到更多示例geom_histogram()

于 2013-10-15T19:52:29.280 回答
0

对我来说,这听起来像是您在询问如何生成可变大小的条形宽度。如果是这样,您只需要在 ggplot 美学中调用“宽度”参数,如下所示:

ggplot(data, aes(x = x, y = y, width = num))

此方法在以下问题中有更多讨论: R 中的 ggplot2 barplot 中的可变宽度条

于 2013-10-15T20:50:38.463 回答