【问题标题】:Split density plot in 4 groups and add the groups to data table将密度图分成 4 组并将组添加到数据表中
【发布时间】:2021-10-24 11:12:51
【问题描述】:

我正在用R 中的ggplot() 创建一个密度图,其中我用一条垂直线(geom_vline()) 指定median5%95% 分位数。这是我的情节建设:

probs <- c(0.05, 0.95)
quantiles <- quantile(dt.all2018$Qeff, prob = probs)
q5 <- as.numeric(quantiles[1])
q95 <- as.numeric(quantiles[2])
median <- median(dt.all2018$Qeff)


p <- (ggplot(dt.all2018) + 
      geom_density(aes(x = Qeff, y = ..scaled..),  colour = "#007d3c") +
      ggtitle("Qeff 2018") +
      geom_vline(aes(xintercept = median, color = "median"), linetype = "dashed") +
      geom_vline(aes(xintercept = q5, color = "5%"), linetype = "dashed") +
      geom_vline(aes(xintercept = q95, color = "95%"), linetype = "dashed") +
      scale_color_manual(name = "statistics", values = c('5%' = "#0000FF", '95%' = "red", median = "#007d3c")) +
      theme(panel.background = element_blank(), axis.line = element_line(colour = "black"),
            plot.title = element_text(lineheight = .8, hjust = 0.5, face = "bold"),
            legend.box.background = element_rect(colour = "black"), legend.box.margin = margin(t = 1, l = 1),
            legend.title = element_blank()))%>%
      ggplotly()

那么我的剧情是这样的(没有我自己画的部分):

现在我想创建一个新列group,其中包含我的数据的组号,即将它所属的组添加到相应的Qeff。第 1 组是5% 之前的所有内容,第 2 组是5%median 之间的所有内容,第3 组是median95% 之间的所有内容,第4 组是95% 之后的所有内容。 group 列应该只包含数字 1 到 4。

我该怎么做?

这是我的数据表的简短 sn-p:

structure(list(EK = c(311746.83, 0, 408503.01, 965723.51, 447176.86, 
0, 0, 237703401.51, 11650300.16, 761470.17, 15514898.49, 791067269.75, 
35591131, 10754272.33, 9496742.11, 512370.9, 1134032.95, 35318984.4, 
5630139.9, 1111511.07), EH = c(345245.44, 0, 439620.18, 894773.08, 
485161.85, 0, 0, 331524231.52, 19502922.3, 1007182.97, 13714848.49, 
470803897.97, 36394200.3, 11485817.1, 9542583.17, 532302.49, 
1071746.46, 20666845.08, 5333889.99, 938096.94), Peff = c(104.78, 
0, 91.52, 112.18, 113.39, 0, 0, 86.18, 101.04, 104.39, 106.23, 
86.4, 96.19, 86.38, 113.5, 115.88, 104.61, 96.31, 95.6, 101.71
), Qeff = c(-0.01, 0, 0, 0, 0, 0, 0, 0, -0.01, -0.01, 0, 0, 0, 
0, 0.01, 0, 0, 0, 0, 0)), class = c("data.table", "data.frame"
), row.names = c(NA, -20L), .internal.selfref = <pointer: 0x000002671f801ef0>)

【问题讨论】:

  • 你可以通过dput()添加你的数据(dt.all2018)
  • 当然 - 我已经编辑了我的问题。

标签: r ggplot2 grouping ggplotly density-plot


【解决方案1】:

通过使用 cut() 函数,

    dt.all2018 <- dt.all2018 %>%
      mutate(group = cut(Qeff, 
                         breaks=c(-Inf, q5, median, q95, Inf), 
                         labels=c(1, 2, 3, 4)))

第二种方式需要更多的测试。很抱歉造成混乱

【讨论】:

  • 我只发现了这样的东西:dt.all2018$quant &lt;- factor(findInterval(dt.all$Qeff, quantiles)),它只考虑分位数5%95%
  • @MikiK 你也可以用这种方式创建组变量。我在上面编辑了我的答案代码。
猜你喜欢
  • 2021-07-15
  • 2022-01-12
  • 2018-11-20
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多