当前位置: 首页 > 知识库问答 >
问题:

使用ggplot2绘制直方图上的密度

陆安国
2023-03-14

我有一个“长”格式的数据框,它包含两列:第一列值,第二列性别[Male-1/Female-2]。我编写了一些代码来制作整个数据集的直方图(下面的代码)。

ggplot(kz6, aes(x = values)) + 
  geom_histogram()

但是,我还想在直方图上添加一个密度,以强调性别之间的差异,即我想组合3个图:整个数据集的直方图,以及每个性别的2个密度图。我尝试使用一些示例(一、二、三、四),但仍然不起作用。“密度”代码仅起作用,而“历史密度”的组合不起作用。

density <- ggplot(kz6, aes(x = x, fill = factor(sex))) + 
  geom_density()

both <- ggplot(kz6, aes(x = values)) + 
  geom_histogram() +
  geom_density()

both_2 <- ggplot(kz6, aes(x = values)) + 
  geom_histogram() +
  geom_density(aes(x = kz6[kz6$sex == 1,]))

P. S.一些例子包含y=...密度...什么意思?对此如何解读?

共有1个答案

左丘善
2023-03-14

要绘制直方图并叠加由分类变量定义的两个密度,请在调用geom_density时使用适当的美学,如group颜色

ggplot(kz6, aes(x = values)) +
  geom_histogram(aes(y = ..density..), bins = 20) +
  geom_density(aes(group = sex, colour = sex), adjust = 2)

数据创建代码。

我将从内置数据集iris创建一个测试数据集。

kz6 <- iris[iris$Species != "virginica", 4:5]
kz6$sex <- "M"
kz6$sex[kz6$Species == "versicolor"] <- "F"
kz6$Species <- NULL
names(kz6)[1] <- "values"
head(kz6)
 类似资料:
  • 我正在使用plotly为正在使用的数据集绘制直方图 这幅图很好,但我不清楚如何绘制一条平滑的密度曲线流过直方图的轮廓。 详细参考手册建议, 直方图跟踪用plot_ly或add_trace初始化: 还有一个histornorm函数,我假设它允许用户绘制密度曲线,但我不确定如何使用该函数。 有兴趣了解其他人是如何处理这个问题的。任何提示或建议都非常感谢。

  • 当我试图用ggplot2制作柱状图时,我在理解为什么日期、标签和中断的处理不像我在R中预期的那样有效时遇到了问题。 我正在寻找: 我约会频率的柱状图 匹配条下居中的勾号 日期标签采用格式 适当的限制;最小化网格空间边缘和最外层条之间的空白空间 我已经将我的数据上传到pastebin,以使其可复制。我已经创建了几个专栏,因为我不确定这样做的最佳方式: 以下是我尝试过的: 这就产生了这个图表。不过,我

  • numpy.histogram()函数将输入数组和作为两个参数。 bin数组中的连续元素用作每个bin的边界。 Matplotlib 可以将直方图的数字表示转换为图形。 pyplot子模块的plt()函数将包含数据和数组的数组作为参数,并转换为直方图。

  • 我正在尝试使用 marplot.lib 库在 Python 中绘制直方图;但是,我一直收到此错误:“属性错误:箱必须单调增加。 这是我目前的代码: 传入的参数是信息。“信息”是一个元组列表,可能如下所示: [(4, 0.7984031936127745), (5, 0.5988023952095809), (5, 0.8739076154806492), (5, 0.736454497632824

  • 我想在不显示直方图的情况下绘制密度线,我使用了以下代码:

  • 我想用R随机构造自由度为5的卡方分布,有100个观测量。这样做之后,我想计算这些观测的平均值,并使用ggplot2用条形图绘制卡方分布。以下是我的代码: 首先,构造一个df=5,obs=100的随机卡方分布的数据帧。 但是,我得到的结果如下: 我被这个问题困了几个小时,在我的全局环境中找不到任何列表。如果有人能帮助我,给我一些建议,将不胜感激。