我使用我的数据做了类似的事情,但是尽管透明度很高,但很难看到这些细分(我的数据的分段数比下面的例子少得多)才能看到它们的开始和结束。
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))
遇到this解决方案,但线条纵横交错。有没有办法让抖动产生与尖端点的平行线?我尝试过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))
答案 0 :(得分:10)
据我所知,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()