Группировка не соблюдается при использовании ggplotly для группировки ящиков - PullRequest
2 голосов
/ 02 октября 2019

Я пробовал следующий код, чтобы получить график коробочных графиков с ggplot2, которые сгруппированы по разным категориям:

category_1 <- rep(LETTERS[1:4], each = 20)
value <- rnorm(length(category_1), mean = 200, sd = 20)
category_2 <- rep(as.factor(c("Good", "Medium", "Bad")), length.out = length(category_1))
category_3 <- rep(as.factor(c("Bright", "Dark")), length.out = length(category_1))
df <- data.frame( category_1, value, category_2, category_3)

p <- ggplot(df, aes(x = category_1, y = value, color = category_2, shape = category_3)) +
  geom_boxplot(alpha = 0.5) +
  geom_point(position=position_jitterdodge(), alpha=0.7)

p

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

Однако, когда я пытаюсь преобразовать его в плотно, используя

pp <- ggplotly(p)
pp

, последние 2 слоя группировки (форма и цвет) имеют вид "игнорируется ", и все графические элементы нанесены друг на друга, соблюдая только группировку по оси х, указанную в aes(x = category_1, ...), как вы можете см. здесь .

Как можно избежать этой проблемы? Спасибо за ваше время.

РЕДАКТИРОВАТЬ

Я пытался использовать сюжетный синтаксис напрямую и получаю аналогичный результат, используя следующий код:

pp <- plot_ly(df, x = ~category_1, y = ~value, color = ~category_2, 
              mode = "markers", symbol = ~category_3, type = "box", boxpoints = "all") %>%
   layout(boxmode = "group")
pp

Вот результат. Я сказал аналогично, потому что из-за заговора заставляет точки быть рядом, а не сверху боксплота, что не совсем то, что я хотел.

Я думаю,вопрос "решен". Хотя мне все еще интересно, есть ли объяснение проблемы выше. Еще раз спасибо!

1 Ответ

1 голос
/ 02 октября 2019

Я думаю, что это решит вашу проблему.

p <- ggplot(df, aes(x = category_1, y = value, color = category_2, shape = category_3)) +
  geom_boxplot(alpha = 0.5) +
  geom_point(position=position_jitterdodge(), alpha=0.7)

p %>%
  ggplotly() %>%
  layout(boxmode = "group")

Приветствия.

...