Трудно определить, какие выбросы, и это действительно зависит от ваших данных. Вы можете попробовать что-то вроде ниже, где я вычисляю невязки по линейной регрессии и определяю те, которые находятся за пределами 2 * sd (остатки), как выбросы.
Сначала что-то похожее на ваши данные, с некоторой ошибкой вводится в policy2
set.seed(888)
data_mean=data.frame(policy1=1:20,policy2=1:20 + rnbinom(20,mu=2,size=2))
data_mean$residuals = abs(lm(policy2~policy1,data=data_mean)$residuals)
# here we define the outliers to be those more than 2 standard error of residuals
data_mean$group = data_mean$residuals > 2*sd(data_mean$residuals)
data_mean$iso = letters[1:20]
Затем мы строим график:
ggplot(data_mean, aes(x= policy1, y= policy2))+
geom_point(aes(colour = group), size=4) +
geom_text_repel(aes(label=iso),hjust=0, vjust=0) +
geom_smooth(method=lm, se=FALSE, size=0.1) +
theme(legend.position="bottom",
legend.title=element_blank())
![enter image description here](https://i.stack.imgur.com/6KiC2m.png)
На самом деле одна альтернатива заключается в использовании непрерывной шкалы:
ggplot(data_mean, aes(x= policy1, y= policy2))+
geom_point(aes(colour = residuals), size=4) +
geom_text_repel(aes(label=iso),hjust=0, vjust=0) +
geom_smooth(method=lm, se=FALSE, size=0.1) +
theme(legend.position="bottom",
legend.title=element_blank()) +
scale_color_viridis()
![enter image description here](https://i.stack.imgur.com/7EqMhm.png)
Опять-таки, будет здорово, если вы поделитесь некоторыми битами данных, а также уточните, как вы хотите раскрасить точки на основе на остатки.