Нарисуйте круги вокруг точек, принадлежащих уровню фактора в 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) 
Другие вопросы по тегам