首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R和ggplot2中以几种方式显示相对频率或密度直方图

在R和ggplot2中以几种方式显示相对频率或密度直方图
EN

Stack Overflow用户
提问于 2021-02-25 13:03:30
回答 1查看 144关注 0票数 0

我将感谢您在以下问题上的帮助(我应该补充说,我也发送了一封电子邮件到ggplot2邮件列表,还没有收到任何人的意见)。

我们确实有一个数据帧一个称为EXP的因子它有3级(二甲基亚砜、DMSO1、DMSO2)

代码语言:javascript
复制
head(pp_ALL)
    VALUE  EXP
1 1639742 DMSO
2 1636822 DMSO
3 1634202 DMSO

我的目标是覆盖吗?相对频率直方图,或密度直方图对于因子水平,

请您告诉我为什么以下两段R代码显示出非常不同的结果(在密度直方图的高度和解释方面):

代码语言:js
复制
ggplot(pp_ALL, aes(x=VALUE, colour=EXP)) + geom_density()

对比

代码语言:javascript
复制
ggplot(data=pp_ALL) +
       geom_histogram(mapping=aes(x=VALUE, y=..density.., colour=EXP),  bins=1000)

谢谢

博格丹

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-25 13:46:31

让我们来比较下面的两个例子。使用此数据的默认设置,它们在形状和密度上看起来非常相似。基于它们的工作方式,它们确实有一些细微的差异,密度图使用平滑算法,而直方图使用离散的柱状图。这有时可以使直方图更容易解释(高度=该柱状图中of的份额,按柱状图宽度缩放),而密度图可能更能反映底层的平滑分布。但您会注意到,在这里它们非常相似。

代码语言:javascript
复制
diamonds %>%
  mutate(cut = factor(cut)) %>%
  ggplot() + 
  geom_density(aes(x = carat, color = cut)) +
  facet_wrap(~cut)

代码语言:javascript
复制
diamonds %>%
  mutate(cut = factor(cut)) %>%
  ggplot() + 
  geom_histogram(aes(x = carat, y = ..density.., fill = cut)) +
  facet_wrap(~cut)

使用其他设置,它们可能看起来非常不同。如果我们将密度图上的带宽设置为1/10,或者对直方图使用10倍数量的柱状图,就会使峰值变得更窄、更高,同时继续将面积积分到1,就像以前一样。我假设你看到的主要情况是你的直方图比你的密度图具有更高的粒度(bins = 1000),所以任何尖峰都会比密度图中的更窄和更高。

geom_density(aes(x = carat, color = cut), adjust = 1/10) +

..。

geom_histogram(aes(x = carat, y = ..density.., fill = cut), bins = 300) +

..。

在使用多个因子的情况下,您可能会注意到的另一个行为差异是,密度图使用没有堆叠的线条,而直方图堆叠--即使直方图具有相同的带宽设置,这也会使直方图更高,因为它堆叠了每个因子的密度。

与原始相同,但没有方面_包装。

尝试

geom_density(aes(x = carat, color = cut), position = "stack")

让它更像直方图。

尝试

geom_histogram(aes(x = carat, y = ..density.., fill = cut), position = "dodge")

使其更像密度图。]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66362697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档