Как добавить отдельные значения (фигуры) в geom_split_violin () на основе групп? - PullRequest
0 голосов
/ 14 апреля 2020

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

enter image description here

Это должно выглядеть примерно так с формой: enter image description here

Вот код моего текущего графика (первое изображение):

ggplot(data = csi, aes(x=species,y=CSI, fill=time))+
  geom_split_violin(stat = "ydensity", trim = T,scale = "width")+
  scale_fill_manual(values=c("grey40","grey60"))+
  theme(axis.text.x=element_text(angle=35,hjust = 1))

А вот так выглядит мой набор данных:

str(csi)
'data.frame':   265196 obs. of  3 variables:
 $ species: Factor w/ 17 levels "Tilia europaea",..: 8 8 8 8 8 8 8 8 8 8 ...
 $ time   : Factor w/ 2 levels "present","future": 1 1 1 1 1 1 1 1 1 1 ...
 $ CSI    : num  0.395 0.66 0.615 0.612 0.808 ...

head(csi)
           species    time       CSI
1 Acer platanoides present 0.3953996
2 Acer platanoides present 0.6603609
3 Acer platanoides present 0.6148618
...

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

                 species    time      mean
1       Acer platanoides present 0.7069132
2       Acer platanoides  future 0.4984167
3            Acer rubrum present 0.2257700
4            Acer rubrum  future 0.1622086
...

Как мне этого добиться? Заранее спасибо и наилучшими пожеланиями

1 Ответ

1 голос
/ 16 апреля 2020

Я нашел ответ, который искал здесь . Для geom_point() требуется только добавление position=position_dodge(width=0.7) или другой номер. Спасибо людям по ссылке выше!

Вот мой сюжет: enter image description here

И окончательный код: (Я объединил два df, упомянутых в первом добавьте еще один столбец "mean" к первому df)

  geom_split_violin(aes(x = species,y = CSI, fill = time),
                    stat = "ydensity", trim = T, scale = "width")+
  geom_point(mapping = aes(x = species, y = mean, shape = time), position = position_dodge(width = 0.7))+
  theme(axis.text.x=element_text(angle=35,hjust = 1))
...