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

时间:2018-10-22 06:20:35

标签: r ggplot2 plot anomaly-detection

上一篇文章介绍了如何在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()

3 个答案:

答案 0 :(得分:2)

您需要做的是先绘制所有点,然后仅绘制圆圈以将数据缩小到要突出显示的因子水平。这样可以解决您的问题吗?

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()

请注意,我更改了数据集,因为我需要数据中的一个要素来向您展示其工作原理。

答案 1 :(得分:1)

让我们假设您感兴趣的“因子水平”是10.4的值mtcars$mpgmtcars$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到因数的转换不是必需的,并且代码将以相同的方式在数值向量上运行。因为您的问题是关于“因子水平”的,所以我将其转换。

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

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()

因为您现在仅在测试是否平等,而不是在外观上。

答案 2 :(得分:0)

我最近尝试使用上述方法来突出显示具有分解轴的点的子集。不幸的是,第二个子集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)