r - как дрожать/dodge geom_segments, чтобы они оставались параллельными?



plot ggplot2 (1)

Насколько мне известно, geom_segment не позволяет geom_segment и не уклоняться. Вы можете добавить дрожание в соответствующую переменную в фрейме данных, а затем нарисовать дрожащую переменную. В вашем примере коэффициент преобразуется в числовой, затем метки для уровней фактора добавляются к оси с использованием scale_y_continuous .

library(ggplot2)
iris$JitterSpecies <- ave(as.numeric(iris$Species), iris$Species, 
   FUN = function(x) x + rnorm(length(x), sd = .1))

ggplot(iris, aes(x = Petal.Length, xend = Petal.Width,
                 y = JitterSpecies, yend = JitterSpecies)) +
    geom_segment()+
    geom_point(aes(size=Sepal.Length, shape=Species)) +
    scale_y_continuous("Species", breaks = c(1,2,3), labels = levels(iris$Species))

Но, похоже, geom_linerange позволяет уклоняться.

ggplot(iris, aes(y = Petal.Length, ymin = Petal.Width,
                 x = Species, ymax = Petal.Length, group = row.names(iris))) +
       geom_point(position = position_dodge(.5)) +
     geom_linerange(position = position_dodge(.5)) +
     coord_flip()

https://ffff65535.com

Я сделал что-то подобное с моими данными, но, несмотря на прозрачность, сегменты трудно представить (мои данные имеют намного меньшее количество сегментов, чем пример ниже), чтобы увидеть их начало и конец.

require(ggplot2)
ggplot(iris, aes(x = Petal.Length, xend = Petal.Width,
                 y = factor(Species), yend = factor(Species),
                 size = Sepal.Length)) +
    geom_segment(alpha = 0.05) + 
    geom_point(aes(shape = Species))

Пришли через это решение, но линии пересекаются. Есть ли способ заставить дрожание создавать параллельные линии с точками на кончиках? Я попытался position_dodge вместо position_jitter , но он требует ymax . Может ли ymax быть интегрированным вообще для использования с geom_segment ?

ggplot(iris, aes(x = Petal.Length, xend = Petal.Width,
                 y = factor(Species), yend = factor(Species))) +
    geom_segment(position = position_jitter(height = 0.25))+
    geom_point(aes(size = Sepal.Length, shape = Species))




ggplot2