在属于 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.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
转换为因子,代码将以相同的方式对数值向量 运行 进行转换。我转换了它,因为你的问题是关于 "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)
之前的 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.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
转换为因子,代码将以相同的方式对数值向量 运行 进行转换。我转换了它,因为你的问题是关于 "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)