ggplot geom_area分布与相同的geom_histogram

时间:2018-06-19 13:28:08

标签: r ggplot2

让我们从钻石数据集中绘制一些直方图。

library(tidyverse)
ggplot(diamonds, aes(price)) +
  geom_histogram(bins = 50) + 
  facet_wrap(~ cut)

Capture_A.png

我可以使用相同的数据并将其绘制为geom_area,并且分布完全改变。如果您查看“公平”或“良好”分布上方的分面图,则对于它们各自的分面而言只是短暂的消息。查看下面geom_area上的“公平”和“良好”分布,它们是图表上最大的山脉。什么地方出了错?两者都是计数,而不是密度。分布看起来不一样吗?如何使geom_area分布与geom_histogram分布相同?

ggplot(diamonds, aes(price, fill = cut)) +
  geom_area(bins = 50, stat = "bin")

Capture_B.png

2 个答案:

答案 0 :(得分:4)

我认为是因为geom_area()会堆叠分布。如果您也geom_area()也有相同的结果,那么您将得到:

library(tidyverse)
ggplot(diamonds, aes(price)) +
  geom_histogram(bins = 50) + 
  facet_wrap(~ cut)

ggplot(diamonds, aes(price)) +
  geom_area(bins = 50, stat = "bin") + 
  facet_wrap(~ cut)

enter image description here

enter image description here

最好的证明是这样的:

# Take only one facet <- cut
diam <- diamonds[which(diamonds$cut=='Ideal'),]

ggplot(diam, aes(price)) +
  geom_histogram(bins = 50) + 
  facet_wrap(~ cut)


ggplot(diam, aes(price)) +
  geom_area(bins = 50, stat = "bin") + 
  facet_wrap(~ cut)

答案 1 :(得分:1)

geom_area()函数显示累积值。只有具有颜色的部分才是特定因子的计数。如果使用以下代码,则将获得与直方图一致的结果。

ggplot(diamonds, aes(price, fill = cut)) +
      geom_area(bins = 50, stat = "bin") + facet_wrap(~cut)

我想您正在寻找geom_density。

尝试:

ggplot(diamonds, aes(price, fill = cut)) +
     geom_density(bins = 50, stat = "bin", alpha = 0.3)