0

我只是想ggplot在箱线图上绘制一个覆盖点图的图。我得到了非常奇怪的结果,希望有人能告诉我为什么以及如何解决它。在 geom_boxplot(fill=group) 上覆盖 geom_points()?这是一个类似的问题。但我的关键问题是shape.

这是一个例子:

library(ggplot2)
library(dplyr)

head(mtcars)

data = data.frame(
  x = factor(mtcars$vs),
  y = mtcars$wt,
  fill = factor(mtcars$am)
) %>% 
  dplyr::arrange(x, fill) %>% 
  dplyr::mutate(shape = rep(letters[1:4], 8))

set.seed(1)
ggplot(data, aes(x, y, fill = fill)) +
  geom_boxplot() +
  geom_point(position=position_jitterdodge())

我可以得到一个情节:

在此处输入图像描述

然后我添加形状映射。您可以看到所有点都完全改变了。我想要的是与上面相同的情节,只是点的形状发生了变化。即,点的位置不应改变。我不知道为什么添加形状映射后,点被不正确地分配给框组。

set.seed(1)
ggplot(data, aes(x, y, fill = fill)) +
  geom_boxplot() +
  geom_point(aes(shape = shape), position=position_jitterdodge())

在此处输入图像描述

4

1 回答 1

1

在这种情况下,我们希望位置抖动能够“意识到”两个填充值,这两个填充值在fill美学上是有区别的。由于这里的形状没有fill美感,所以图层在应用抖动之前不会自动分离两个填充值。为了让图层“知道”填充值,我们可以使用

geom_point(aes(shape = shape, group = fill), 
               position=position_jitterdodge()) 

wheregroup = fill告诉图层根据该变量对点进行分组,然后将反映在点抖动的方式中。

在此处输入图像描述

于 2021-12-07T17:25:56.277 回答