Равномерно распределить точки данных в boxplot в R (используя ggplot2) - PullRequest
0 голосов
/ 05 марта 2019

У меня проблема с расстоянием между точками данных в блокпосте.Я использую следующий код.

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)))

Это приводит к следующему:

R boxplot ggplot2

Для x все точки данных равномерно распределены слева направо, нопоскольку у у меньше точек данных, они не распределены равномерно слева направо.Как можно изменить приведенный выше код для равномерного распределения точек данных для y?Буду признателен за любые предложения.

Я нашел несколько похожий пост здесь , но это не могло мне помочь.

Спасибо.

1 Ответ

0 голосов
/ 05 марта 2019

Проблема в значениях NA в y.После перехода к длинному формату вы можете просто пропустить их:

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)))

enter image description here

...