使用stat_summary时,如何规范化使用geom =“step”绘制的不同曲线?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (287)

这是我的代码。人工生成数据集以模拟与我的实际问题类似的数据。

代码:

library(ggplot2)
DataSet1 <- data.frame("Cat" = rep("A",10000), "Bin" = rep(c(-49:50),100), 
                       "Value" = c(seq(0,4.9, by=0.1),
                                   seq(4.9,0, by=-0.1)) * rep(rnorm(100,50,1),100))
DataSet2 <- data.frame("Cat" = rep("B",10000), "Bin" = rep(c(-49:50),100), 
                       "Value" = c(seq(0,4.9, by=0.1),
                                   seq(4.9,0, by=-0.1)) * rep(rnorm(100,75,1),100))
DataSet3 <- data.frame("Cat" = rep("C",10000), "Bin" = rep(c(-49:50),100), 
                       "Value" = c(seq(0,4.9, by=0.1),
                                   seq(4.9,0, by=-0.1)) * rep(rnorm(100,100,1),100))
DataSet <- rbind(DataSet1, DataSet2, DataSet3)

d <- ggplot(data = DataSet, aes(Bin, Value, color = Cat))
d + stat_summary(fun.y = sum, geom = 'step', size = 1)

我的结果是:

我需要的是对每个图都进行标准化,也就是将每个区宽度的总和除以该曲线的总值。

提问于
用户回答回答于

stat_summary不意味着同时对x和y的所有值进行操作,因此严格来说,在ggplot中不可能实现这种类型的每组汇总。在这样的情况下,最好提前计算总结,然后绘制出来。使用dplyr简化汇总:

library(dplyr)

DataSet <- DataSet %>% 
  group_by(Cat, Bin) %>% 
  summarize(Value = sum(Value)) %>% 
  group_by(Cat) %>% 
  mutate(Value = Value / sum(Value))

d <- ggplot(data = DataSet, aes(Bin, Value, color = Cat))
d + stat_summary(fun.y = mean, geom = 'step', size = 1)

所属标签

可能回答问题的人

  • 西风

    renzha.net · 站长 (已认证)

    7 粉丝1 提问9 回答
  • 四无君

    0 粉丝0 提问3 回答
  • o o

    3 粉丝490 提问2 回答
  • Dingda

    Dingda · 站长 (已认证)

    4 粉丝0 提问2 回答

扫码关注云+社区

领取腾讯云代金券