Как разделить группы полос в ggplot2 geom_point? - PullRequest
0 голосов
/ 26 июня 2019

Я строю данные из data.frame, который структурирован так:

    A       B       C       D
    29.8    8.7     0.1     Type_1

Первые три столбца являются числами с плавающей точкой, а последний - строкой. В столбце 4 имеется 13 возможных строк, и для каждой из этих строк на графике создается строка с помощью geom_point(). Значения с плавающей точкой в ​​первых трех столбцах используются для заполнения строк «точек» (здесь не имеет значения). По сути, каждая строка содержит тысячи точек, которые разбросаны в соответствии со своими значениями в A, B и C.

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

PLOT

Теперь вопрос: я хотел бы сгруппировать строки в соответствии с различными критериями, увеличивая ширину между ними особым образом, то есть не увеличивая ширину между строками обычно , но особенно там, где я хочу это. Как это сделать?

Воображаемый пример: type_1 и type_2 принадлежат друг другу и должны соблюдаться вместе, а type_3 должны быть отделены, чтобы избежать путаницы.

Итог: есть ли быстрый и простой способ указать ширину между группами строк ?

Вот соответствующая часть моего кода сюжета:

P1 <- ggplot(...) + 
geom_point(position = position_jitter(w = 0.15, h = 0), alpha=0.3, size=0.5) +
scale_x_discrete() +
scale_y_continuous(limits=c(0,100), breaks=seq(0,100,10)) + 
scale_color_gradient2(breaks=seq(0,100,20), 
                      limits=c(0,100), 
                      low="green3",
                      high="darkorchid4",
                      midpoint=50,
                      name="") +
coord_flip()

1 Ответ

1 голос
/ 27 июня 2019

Я считаю, что самый простой способ решить вашу проблему - это создать столбец «E» во фрейме данных с фактором «группировки».Поскольку вы не предоставили данные для повторного использования, я считаю, что Dplyr - лучшее решение для создания этого дополнительного столбца, но я не могу предложить кусок кода.Вывод должен выглядеть примерно так:

 A       B       C       D       E
29.8    8.7     0.1     Type_1  group_1
29.6    8.2     0.7     Type_2  group_1
...

Тогда вы можете использовать facet_wrap (~ E, ncol = 1) следующим образом:

P1 <- ggplot(...) + 
geom_point(position = position_jitter(w = 0.15, h = 0), alpha=0.3, size=0.5) +
scale_x_discrete() +
scale_y_continuous(limits=c(0,100), breaks=seq(0,100,10)) + 
scale_color_gradient2(breaks=seq(0,100,20), 
                  limits=c(0,100), 
                  low="green3",
                  high="darkorchid4",
                  midpoint=50,
                  name="") +
coord_flip()+
facet_wrap(~E, ncol=1)
...