r语言 - 在 ggplot 中围绕属于因子水平的点绘制圆圈



上一篇文章描述了如何在超过 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()

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

假设您感兴趣的"因子水平"是mtcars$mpg10.4的值。mtcars$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()

因为您现在只测试平等而不是公寓。

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

最新更新