Добавить новый geom в качестве новой строки в ggplot2, предотвращая расслоение графиков - PullRequest
0 голосов
/ 01 июля 2019

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

У меня есть сюжет, сделанный вggplot2, который использует geom_jitter(), эффективно создавая одну строку для каждого элемента в факторе и выводя на график его значения.Я хотел бы добавить дополнительный geom_violin() к графику, но простое добавление дополнительной функции geom_ к коду графика возвращает два слоя: jitter и violin, один поверх другого (как обычно,ожидается).

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

Вот как выглядит график: enter image description here Как я могу иметь violin в качестве отдельной строки, не генерируявторой сюжет?Побочный квест: как я могу чередовать геомы jitter и violin?(то есть строка джиттера элемента A, за которой следует строка скрипки элемента A, а затем строка джиттера элемента B, за которой следует строка скрипки элемента B)

Это минимально необходимый код для его создания (без всех украшений theme()):

P1 <- ggplot(data=TEST_STACK_SUB, aes(x=E, y=C, col=A)) + 
theme(... , aspect.ratio=0.3) + 
geom_point(position = position_jitter(w = 0.30, h = 0), alpha=0.2, size=0.5) +
geom_violin(data=TEST_STACK_SUB, mapping=aes(x=E, y=C), position="dodge") +
scale_x_discrete() +
scale_y_continuous(limits=c(0,1), breaks=seq(0,1,0.1), 
                  labels=c(seq(0,1,0.1))) + 
scale_color_gradient2(breaks=seq(0,100,20), 
                      limits=c(0,100), 
                      low="green3",
                      high="darkorchid4",
                      midpoint=50,
                      name="") +
coord_flip()

options(repr.plot.width=8, repr.plot.height=2)
plot(P1)

Вот подмножество данных для его генерации (на ваше усмотрение): data

1 Ответ

1 голос
/ 01 июля 2019

Как насчет манипулирования вашим фактором как непрерывной переменной и подталкивания записей между aes() вызовами, например, так:

library(dplyr)
library(ggplot2)

set.seed(42)

tibble(x = rep(c(1, 3), each = 10), 
       y = c(rnorm(10, 2), rnorm(10))) -> plot_data

ggplot(plot_data) + 
  geom_jitter(aes(x = x - 0.5, y = y), width = 0.25) + 
  geom_violin(aes(x = x + 0.5, y = y, group = x), width = 0.5) + 
  coord_flip() + 
  labs(x = "x") + 
  scale_x_continuous(breaks = c(1, 3), 
                     labels = paste("Level", 1:2), 
                     trans = scales::reverse_trans())

plot output

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...