geom_histogram 关于统计变换有什么不同

问题描述 投票:0回答:1

我不知道plot1和plot2统计变换之间的区别?

plot1 <- ggplot(mpg, aes(x = hwy)) +
  geom_histogram(stat = "density")

plot2 <-ggplot(mpg, aes(x = hwy)) +
  geom_histogram(aes(y = after_stat(density)))

我尝试比较两个图的y轴含义,我认为图1与geom_密度类似,图2是hwy首先由密度计算,然后计算bin中的计数。我的理解正确吗?

r ggplot2 stat geom geom-histogram
1个回答
0
投票

对,

plot2
采用
geom_histogram
的默认行为,其中数据被分箱到 30 个箱中,并按这些箱进行计数。我们可以使用
ggplot2::layer_data
来查看它正在进行的计算。

在此数据中,默认 bin 的宽度为 1.103 个单位。由于

hwy
数据是整数,这意味着大多数 bin 反映一个
hwy
值,但少数(如第 14 个)反映两个
hwy
值。

第 14 个 bin 的范围从 xmin 25.93 到 xmax 27.03,因此它包含所有

hwy
26 或 27 个观测值。这是 234 个观测值中的 46 个 (19.6%),但由于每个箱的宽度为 1.103,因此该箱数据的计算高度为 46 / 234 / 1.103 = 0.178。这样,垃圾箱的总面积将为 1。

layer_data(ggplot(mpg, aes(x = hwy)) +
             geom_histogram(aes(y = after_stat(density))))


`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
             y count        x     xmin     xmax     density     ncount   ndensity flipped_aes PANEL group ymin        ymax colour   fill linewidth linetype
1  0.019364316     5 12.13793 11.58621 12.68966 0.019364316 0.10869565 0.10869565       FALSE     1    -1    0 0.019364316     NA grey35       0.5        1
2  0.000000000     0 13.24138 12.68966 13.79310 0.000000000 0.00000000 0.00000000       FALSE     1    -1    0 0.000000000     NA grey35       0.5        1
3  0.007745726     2 14.34483 13.79310 14.89655 0.007745726 0.04347826 0.04347826       FALSE     1    -1    0 0.007745726     NA grey35       0.5        1
...
14 0.178151709    46 26.48276 25.93103 27.03448 0.178151709 1.00000000 1.00000000       FALSE     1    -1    0 0.178151709     NA grey35       0.5        1
...

以下是一些变体的比较。

stat = density
完全不同,显示计算出的核密度估计。
stat = count
计算
hwy
的每个值,并与这些整数值对齐。默认的
geom_histogram
行为分为 30 个绑定并给出计数。 (我们可以看到第 14 个 bin 飙升至 46。)
after_stat(density
)将这些 bin 值转换为总面积为 1。我们也可以将 bin 宽度指定为 1,以获得面积为 1 的直方图,该直方图对应于我们用
stat = count
看到的图案。

enter image description here

library(patchwork); library(tidyverse)
ggplot(mpg, aes(x = hwy)) +
  geom_histogram(stat = "density") +
  labs(title = "stat = density") |

ggplot(mpg, aes(x = hwy)) +
  geom_histogram(stat = "count") +
  labs(title = "stat = count") |

ggplot(mpg, aes(x = hwy)) +
  geom_histogram() +
  labs(title = "default") |
  
ggplot(mpg, aes(x = hwy)) +
  geom_histogram(aes(y = after_stat(density))) +
  labs(title = "after_stat(density)") |
  
ggplot(mpg, aes(x = hwy)) +
  geom_histogram(aes(y = after_stat(density)), binwidth = 1) +
  labs(title = "after_stat(density),\nbinwidth = 1") 
© www.soinside.com 2019 - 2024. All rights reserved.