Нарисуйте круги вокруг точек, принадлежащих уровню фактора в 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()
2 ответа
Давайте предположим, что "уровень фактора", который вас интересует, является значением 10.4
за mtcars$mpg
, 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()
так как вы сейчас проверяете только на равенство, а не на самообладание.
Все, что вам нужно, это сначала построить все точки, а затем построить только круги для данных, приведенных к уровням факторов, которые вы хотите выделить. Решает ли это вашу проблему?
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()
Обратите внимание, что я изменил набор данных, так как мне нужен был фактор в данных, чтобы показать вам, как он работает.
Недавно я попытался использовать вышеуказанные методы, чтобы выделить подмножество точек с факторизованной осью. К сожалению, включение второго подмножества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)