【问题标题】:Evenly distribute data points in boxplot in R (using ggplot2)在 R 中的箱线图中均匀分布数据点(使用 ggplot2)
【发布时间】:2019-07-26 07:15:01
【问题描述】:

我对箱线图中的数据点间距有疑问。我使用以下代码。

DF1 <- data.frame(x = c(1, 2, 3, 4, 7, 11, 20, 23, 24, 25, 30), y = c(3, 6, 12, 13, 17, 22, NA, NA, NA, NA, NA))
library(ggplot2)
library(tidyverse)
n <- 11
DF1 <- as.data.frame(DF1)
DF1 <- reshape2::melt(DF1)
DF1 %>%
  group_by(variable) %>%
  arrange(value) %>%
  mutate(xcoord = seq(-0.25, 0.25, length.out = n())) %>%
  ggplot(aes(x = variable, y = value, group = variable)) +
  geom_boxplot() +
  geom_point(aes(x = xcoord + as.integer(variable)))

这会导致以下结果:

对于 x,所有数据点从左到右均匀分布,但由于 y 的数据点较少,所以它们从左到右不是均匀分布的。如何修改上面的代码以平均间隔 y 的数据点?如有任何建议,我将不胜感激。

我发现了一个有点相似的帖子here,但这对我没有帮助。

谢谢。

【问题讨论】:

    标签: r ggplot2 boxplot spacing


    【解决方案1】:

    问题在于y 中的NA 值。转到长格式后,您可以简单地省略它们:

    plot_data = DF1 %>%
      na.omit %>%  ## add this here
      group_by(variable) %>%
      arrange(value) %>%
      mutate(xcoord = seq(-0.25, 0.25, length.out = n()))
    
    ggplot(plot_data, aes(x = variable, y = value, group = variable)) +
      geom_boxplot() +
      geom_point(aes(x = xcoord + as.integer(variable)))
    

    【讨论】:

    • 哇,太棒了!感谢您的快速回答@gregor!
    • @PeterDuncan,如果您对此答案感到满意,请考虑通过单击复选标记来接受它。这将帮助 SO 的其他用户,并为回答者提供额外的声誉积分。如需进一步指导,请参阅SO Help Center。谢谢。
    猜你喜欢
    • 2023-04-06
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    相关资源
    最近更新 更多