【问题标题】:ggplot2 geom_freqpoly line doesn't cross x-axis at expected valuesggplot2 geom_freqpoly 线不在预期值处穿过 x 轴
【发布时间】:2014-01-16 01:48:00
【问题描述】:

我使用 ggplot2 和 geom_freqpoly 函数制作了一个图表。我无法发布图片,但希望我能描述我的问题。

我的图表显示了两条线,表示沿 x 轴的给定点的观察次数,增量为 0.50,我的数据中的值仅存在于这 0.50 个间隔内。

我创建了这个示例数据集以希望说明:

AvgMargin <- c(0.00, 0.50, 2, 1, 1, 0.5, 0.5)
Median <- as.factor(c("High", "Low", "Low", "High", "High", "Low", "Low"))
Matches <- data.frame(AvgMargin, Median)

我使用的代码如下:

ggplot(Matches, aes(AvgMargin, colour=Median)) + geom_freqpoly(binwidth=0.5) + scale_x_continuous(breaks=-5:5)

我遇到的问题是我的线条的峰值与我期望的 x 轴上的值不对应。我的 x 轴上的值仅以 0.50 为增量,但我似乎在这些点之间有峰值(在 0.25 和 0.75 处,但我的数据中没有 0.25 和 0.75 的值)。

我想知道的是如何让我的线条与我的 x 轴相对应?

【问题讨论】:

  • 一个可重现的例子 (stackoverflow.com/questions/5963269/…) 比描述要好得多。发布您使用的数据集并提供帮助会容易得多。
  • 嗨,我无法发布我的数据集,但我用一个希望可以复制的示例编辑了我的问题。谢谢
  • 顺便说一句,那就更好了!
  • 那么您期望 x 轴上的值是多少? 0.25 的增量?
  • 嗨,我的 x 轴上的值是正确的(0.00、0.50、1.00 等),但我希望我的线的峰值对应于这些 0.50 增量。因此,在上面的示例中,我的红线(“高”)目前在 0.25 和 1.25 处达到峰值,而我预计它会在 0.00 和 1.00 处。同样,蓝线(“低”)在 0.75 和 2.25 达到峰值,而我预计它会在 0.50 和 2.00

标签: r ggplot2


【解决方案1】:

根据我收到的答案,我现在有以下代码:

ggplot(Matches, aes(AvgMargin, colour=Median)) + geom_freqpoly(binwidth=0.5, origin=-0.25)

这给了我以下输出:

参数“origin”告诉 bin 从 -0.25 开始,因此中点和峰值现在落在我想要的增量上

【讨论】:

    【解决方案2】:

    这是因为您设置 binwidth 的方式。试试这个:

    ggplot(Matches, aes(AvgMargin, colour=Median)) + 
      geom_freqpoly() + 
      xlim(-5,5)
    

    ggplotAvgMargin 计数到 bin 中,并在每个 bin 的中心绘制峰值。由于您的数据范围从[0,2],如果您设置binwidth=0.5,您将在[0,0.5), [0.5,1), [1,1.5), [1.5,2), and [2,2.5) 获得垃圾箱。峰值绘制在 0.25、0.75、1.25、1.75 和 2.25 处。如果省略binwidth= 参数,则默认为range/30,或约0.066;第一个 bin 将以 0.033 为中心,最后一个 bin 以 2.033 为中心。

    因此,binwidth 越小,峰越接近您想要的位置(但多边形也会越窄):

    ggplot(Matches, aes(AvgMargin, colour=Median)) + 
      geom_freqpoly(binwidth=0.0001) 
    

    【讨论】:

    • 您好,感谢您的回复。我仍然无法让线条看起来像我期望的那样。我希望每条线的峰值(和谷值)与我的 x 轴上的点(以及相应的网格线)相对应。这些以 0.50 为增量
    • 感谢您的帮助。您的回答促使我查找如何让垃圾箱从不同的点开始(不仅仅是从零开始)。我仍然希望它们的宽度为 0.50,但峰值在 0.50 的间隔上。我认为“origin”参数实现了这一点:ggplot(Matches, aes(AvgMargin, colour=Median)) + geom_freqpoly(binwidth=0.5, origin=-0.25)
    • 您应该将其发布为您自己问题的答案。 SO 鼓励这种类型的事情。
    • 我会的。感谢您的帮助,非常感谢
    猜你喜欢
    • 2018-07-20
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    相关资源
    最近更新 更多