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