【问题标题】:Plotting cumulative histogram with negative and positive side in ggplot?在ggplot中绘制带有负侧和正侧的累积直方图?
【发布时间】:2015-03-05 09:32:18
【问题描述】:

R version 3.1.1 (2014-07-10) Platform: i386-w64-mingw32/i386 (32-bit)

我正在使用ggplot2 制作直方图。目的是在一个图中将负侧和正侧的累积直方图组合在一起。很容易我可以分别绘制负面和正面的直方图,但是一旦我将它们组合起来,它就会变得一团糟。

样本数据:

df <- structure(list(NEG = c(-42.962, -1.86, -13.275, -56.188, -2.25, 
-12.199, -3.953, -13.309, -4.512, -11.461, -19.813, -54.311, 
-59.934, -7.045, -14.44, -40.829, -143.034, -233.009, -70.72, 
-5.578), POS = c(180.328, 290.809, 156.894, 31.414, 629.74, 590.672, 
268.89, 69.618, 415.007, 138.444, 10.139, 20.565, 106.027, 69.129, 
19.809, 8.22, 53.711, 36.035, 11.694, 12.705)), .Names = c("NEG", 
"POS"), row.names = c(NA, 20L), class = "data.frame")

积极方面的代码确实有效:

ggplot(df)+ 
      geom_histogram(aes(x= POS, y=rev(cumsum(rev(..count..)))/4),binwidth=1)

负面代码也可以:

ggplot(df)+ 
      geom_histogram(aes(x= NEG, y=cumsum(..count..)/4),binwidth=1)

但是将这两层结合起来会产生混乱:

ggplot(df)+ 
      geom_histogram(aes(x= POS, y=rev(cumsum(rev(..count..)))/4),binwidth=1)+
      geom_histogram(aes(x= NEG, y=cumsum(..count..)/4),binwidth=1)

希望你能帮帮我!

非常感谢!

【问题讨论】:

  • 很好,清晰的问题,带有可重现的示例和您尝试过的代码 ~~> (+1)。干杯。

标签: r plot ggplot2 histogram


【解决方案1】:

问题在于,对于两个层,累积和都是在整个 x 轴上计算的。

ggplot(df)+ 
  geom_histogram(aes(x= POS, y=ifelse(x>=0, 
                                      rev(cumsum(rev(..count..)))/4, 
                                      0)),
                 binwidth = 1)+ 
  geom_histogram(aes(x= NEG, y=ifelse(x<=0,
                                      cumsum(..count..)/4,
                                      0)),
                 binwidth = 1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 2015-12-05
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 2021-06-02
    相关资源
    最近更新 更多