Нарисуйте круги вокруг точек, входящих в факторный уровень в 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()

Обратите внимание, что я изменил набор данных, так как мне нужен фактор в данных, чтобы показать вам, как это работает.


Есть идеи?

10000