首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将直方图与“分类”x变量图相结合

将直方图与“分类”x变量图相结合
EN

Stack Overflow用户
提问于 2017-02-21 21:40:49
回答 1查看 210关注 0票数 1

我想将一个二进制变量的“正常”直方图(y轴上的分数)与第二个直方图(最好通过其alpha值(透明度)与第一个直方图区分开来)相结合,该直方图描述x轴的特定类别。

有关示例,请参阅以下代码:

代码语言:javascript
运行
复制
ggplot(mtcars, aes(x = mpg, y = ..count../sum(..count..))) +
geom_histogram()

对于数值x变量,我创建了factor变量:

代码语言:javascript
运行
复制
mtcars$mpgCat <- ifelse(mtcars$mpg <= 15, 0,
                    ifelse(mtcars$mpg > 15 & mtcars$mpg <=25, 1,
                           ifelse(mtcars$mpg > 25 & mtcars$mpg < 35, 2, NA)))
mtcars$mpgCat <- factor(mtcars$mpgCat, levels = c(0:2), labels = c("<=15", ">15", "<35"))

当指定stat=“count”时,因子变量会生成直方图:

代码语言:javascript
运行
复制
ggplot(mtcars, aes(mpgCat, y = ..count../sum(..count..))) +
  geom_histogram(stat="count")

有没有办法组合两个直方图,最好是后者是透明的,以便数字x值直接与factorvariable的各自条形重叠?当然,如果因子变量的条的宽度代表它们“表示”的数值x变量的分数,这将是最好的。然而,后者可能过于复杂?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-22 16:03:42

事实证明,如果你知道如何提问,ggplot2会自动完成你想要的大部分事情。我创建了两个直方图层。第一种方法具有手动选择的存储箱数量(bins=10),并手动调整boundary=0.25以使存储箱边界在视觉上对齐。第二种方法手动创建了精确的存储箱边界(breaks=c(10, 15, 25, 35)),选择这些边界与您的三种mpgCat类别完全匹配。它还为整个图层(alpha=0.4)设置了透明度。您可能还会对将连续变量拆分成因子的cut()函数感兴趣。

代码语言:javascript
运行
复制
library(ggplot2)

mtcars$mpgCat = cut(mtcars$mpg, c(10, 15, 25, 35))

p = ggplot(data=mtcars) +
    geom_histogram(aes(x=mpg, y=..count../sum(..count..)), 
                   bins=20, boundary=0.25) +
    geom_histogram(aes(x=mpg, y =..count../sum(..count..), fill=mpgCat), 
                   alpha=0.4, breaks=c(10, 15, 25, 35))

ggsave("histgram.png", plot=p, height=4, width=6, dpi=150)

请注意,此图可能具有相当的误导性;红色和蓝色条分别表示数据的20%,但蓝色条的面积完全是红色的两倍!

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

https://stackoverflow.com/questions/42368930

复制
相关文章

相似问题

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