ggplot geom_point position_jitterdodge не работает, когда указан цвет?

Я построил коробку + точки. Я хочу добавить цвета к точкам. position_jitterdodge отлично работал без цвета, как показано на рисунке B, точки близки, что я и собирался сделать. Но когда я пытаюсь добавить цвета к точкам, параметр jitter.width больше не работает (рис. A). Точки слишком далеко друг от друга. Я пробовал разные номера для jitter.width, но не работал. Как решить эту проблему?

library(tidyverse)
library(ggpubr)
mtcars$cyl <- factor(mtcars$cyl)

p1 <- mtcars %>% ggplot(aes(x = cyl, y = mpg, fill = cyl)) +  
  geom_boxplot() +
  geom_point(position = position_jitterdodge(jitter.width = 0.2),
             aes(color = factor(wt)), show.legend = FALSE)

p2 <- mtcars %>% ggplot(aes(x = cyl, y = mpg, fill = cyl)) +  
  geom_boxplot() +
  geom_point(position = position_jitterdodge(jitter.width = 0.2))

ggarrange(p1, p2, labels = c("A", "B"))

образец ggplot


person Bing    schedule 25.09.2018    source источник


Ответы (2)


В p1 точки не только дрожат, но и уклоняются от factor(wt). Если вам нужен только джиттер, установите dodge.width = 0 в position_jitterdodge.

person Henrik    schedule 25.09.2018

Похоже, проблема в том, что точки имеют дискретную эстетику color, но не эстетику group. Если вы хотите сохранить окраску дискретной переменной, добавьте group = cyl к эстетике для слоя geom_point. Если вы строите график с другим набором данных, группирующая переменная будет той же самой переменной, которую вы строите по оси x.

Одна загвоздка: вам нужно увеличить jitter.width, когда вы применяете группировку, чтобы она была видна. Мне пришлось набрать его с 0,2 до 3 здесь.

Другой вариант — раскрасить по непрерывной переменной.

library(tidyverse)
library(ggpubr)

mtcars$cyl=factor(mtcars$cyl)

p3=mtcars %>% ggplot(aes(x=cyl, y=mpg, fill=cyl))+  
  geom_boxplot()+
  geom_point(aes(color = factor(wt), group = cyl),
         position=position_jitterdodge(jitter.width=0.2),
         show.legend = F)

p4=mtcars %>% ggplot(aes(x=cyl, y=mpg, fill=cyl))+  
  geom_boxplot()+
  geom_point(aes(color = wt),
         position=position_jitterdodge(jitter.width=0.2),
         show.legend = F)

ggarrange(p3, p4)

В конечном итоге это будет встроено, но пока ссылка: color_and_jitter

person adviksh    schedule 25.09.2018