如何在 ggplot2 geom_jitter 上使分组更紧密?

How to make grouping tighter on ggplot2 geom_jitter?

尝试将我在 reddit 上找到的用于政治调查的代码重新用于更小的样本量。

我正在使用 geom_jitter 创建散点图。这是我的代码:

ggplot(sae, aes(Alignment, Abortion))+
geom_jitter(aes(color = "green"), size = 4, alpha = 0.6)+
labs("Alignment", "Stance on Abortion")

这是它给出的图表:

如何使 "Pro-choice" 或 "Pro-life" 行周围的分组更紧密?我相信这个当前图表会让很多人混淆哪些观察是支持选择或支持生命。

帮助解决颜色问题加分。

可以在position = position_jitter()中设置width参数来控制点的紧密程度

ggplot(sae, aes(Alignment, Abortion)) +
    geom_jitter(color = "green", size = 4, alpha = 0.6, position = position_jitter(width = .2)) +
    labs("Alignment", "Stance on Abortion")

如果您使用的是最新的 ggplot2 开发版本 (1.0.1.9003),您可以改为 geom_jitter(width = .2, ...)

如果仍然太宽,请将 width 减小到较小的值(反之亦然)。另请注意,要更改点的颜色,我删除了 color = "green" 周围的 aes()

你有一个更大的问题。 x 轴是按字母顺序排列的,这很容易混淆,而且可能不是您想要的。此外,您可能需要同时指定 width(x 方向抖动)和 height(y 方向抖动)。

您可以使用

等方法修正顺序
sae$Alignment <- factor(sae$Alignment, levels=unique(sae$Alignment))

如下所示。

# make up some data - you have this already
set.seed(1)     # for reproducible example
sae <- data.frame(Alignment=rep(c("Left","Left Leaning","Center","Right Leaning","Right"),each=5),
                  Abortion =sample(c("Pro Choice","Pro Life","Other"),25, replace=TRUE))

# you start here...
library(ggplot2)
sae$Alignment <- factor(sae$Alignment, levels=unique(sae$Alignment))
ggplot(sae, aes(Alignment, Abortion))+
  geom_point(color = "green", size = 4, alpha = 0.6, position=position_jitter(width=0.1, height=0.1))+
  labs("Alignment", "Stance on Abortion")

此外,IMO,你可以做得更好,即。颜色:

sae$Orientation <- with(sae,ifelse(grepl("Left",Alignment),"Progressive",
                                   ifelse(grepl("Right",Alignment),"Conservative","Neutral")))
ggplot(sae, aes(x=Alignment, y=Abortion, color=Orientation))+ 
  geom_point(size = 4, alpha = 0.6, position=position_jitter(width=0.1, height=0.1))+
  labs("Alignment", "Stance on Abortion")

最近刚遇到这个问题,上面的 none 个答案给出了最佳解决方案。

我在库 (geom_beeswarm) 中使用 geom_beeswarm 找到了一个优雅的答案,我想我会 post 在这里。

使用 mpg 使用 geom_jitter 进行复制相当混乱:

data(mpg)
ggplot(mpg, aes(x=cyl, y=hwy, group=factor(cyl))) +
    geom_boxplot() +
    geom_jitter(position = position_jitter(height = .2, width = .2))

而geom_beeswarm使抖动点集中且更清晰:

library(geom_beeswarm)
data(mpg)
ggplot(mpg, aes(x=cyl, y=hwy, group=factor(cyl))) +
    geom_boxplot() +
    geom_beeswarm()