在属于 ggplot 中的因子级别的点周围绘制圆圈

Draw circles around points belonging to a factor level in ggplot

之前的 post 描述了如何在 ggplot 中超过给定值的点周围绘制红色圆圈。我想对异常检测结果做同样的事情,而是在属于给定因子水平的点周围绘制圆圈。

如何更改此代码以允许围绕给定因子水平绘制圆圈?

ggplot(mtcars, aes(wt, mpg)) + 
  geom_point() +
  geom_point(data=mtcars[mtcars$mpg>30,],
             pch=21, fill=NA, size=4, colour="red", stroke=1) +
  theme_bw()

您只需要先绘制所有点,然后仅绘制减少到您要突出显示的因子水平的数据的圆圈。这是否解决了您的问题?

ggplot() + 
      geom_point(data=iris, aes(Sepal.Length, Sepal.Width)) +
      geom_point(data=iris[iris$Species %in% c("setosa"),], aes(Sepal.Length, Sepal.Width),
                 pch=21, fill=NA, size=4, colour="red", stroke=1) +
      theme_bw()

请注意,我更改了数据集,因为我需要数据中的一个因子来向您展示它是如何工作的。

假设您感兴趣的 "factor level" 是 mtcars$mpg 的值 10.4mtcars$mpg 是一个数值向量,所以你必须先把它转换成一个因子。

mtcars$mpg <- as.factor(mtcars$mpg)

然后您可以使用之前用于大于限制的值的相同代码,只是这次条件属于因子水平 10.4:

ggplot(mtcars, aes(wt, mpg)) + 
geom_point() +
  geom_point(data=mtcars[mtcars$mpg %in% 10.4, ],
             pch=21, fill=NA, size=4, colour="red", stroke=1) +
  theme_bw()

请注意,不需要将 mtcars$mpg 转换为因子,代码将以相同的方式对数值向量 运行 进行转换。我转换了它,因为你的问题是关于 "factor level".

另请注意,如果您不处理因子水平,而只是处理与某个数字匹配的值,则可以使用:

ggplot(mtcars, aes(wt, mpg)) + 
  geom_point() +
  geom_point(data=mtcars[mtcars$mpg == 10.4, ],
             pch=21, fill=NA, size=4, colour="red", stroke=1) +
  theme_bw()

因为你现在只测试平等而不是附属。

我最近尝试使用上述方法突出显示具有因式轴的点子集。不幸的是,包含第二个子集 geom_point 调用似乎对轴进行了重新排序。我能够通过使用 gghighlight 包来避免这个问题。

ggplot(mtcars, aes(x = cyl, y = mpg, color = as.factor(carb))) + 
  geom_point() + 
  gghighlight(carb == 2, use_direct_label = FALSE, unhighlighted_colour = NULL) +
  geom_point(pch=21, fill=NA, size=4, colour="black", stroke=0.5)