在ggplot中自动标记离群值

时间:2019-04-18 04:52:25

标签: r ggplot2 ggrepel

我已经在循环中使用ggplot为200个变量(V1,V2等)中的每个变量生成散点图。为了使散点图更清晰,我希望能够自动标记离群值。我想为每个唯一变量标记大于第95个百分位数值的点。

我尝试使用此处Label points in geom_point中的代码,但是,这更像是一种手动标记异常值的方法。我大约有200个变量,无法为每个变量指定值。

同样,我可以从上面的链接中找到最接近的解决方案: county_list [i]是我要遍历的变量的列表

    ggplot(nba, aes(x= county_list[i], y= Afd_2017, colour="green", label=Name))+
    geom_point() +
    geom_text(aes(label=ifelse(value_of_V[i]>24,as.character(Name),'')),hjust=0,vjust=0)

我想要的是这样的:

    ggplot(nba, aes(x= county_list[i], y= Afd_2017, colour="green", label=Name))+
    geom_point() +
    geom_text(aes(label=ifelse((value_of_V[i] >greater-than- 
    value-of-the-95-Percentile-of-the- 
    value_of_V[i]),as.character(Name),'')),hjust=0,vjust=0)

2 个答案:

答案 0 :(得分:3)

您可以使用lapply / map

创建图的列表
library(ggplot2)

list_plots <- lapply(nba[-1], function(data) 
     ggplot(nba, aes(x= MIN, y = data, colour="green", label=Name))+
     geom_point() +
     geom_text(aes(label= ifelse(data > quantile(data, 0.95),
     as.character(Name),'')),hjust=0,vjust=0))

然后,您可以使用[[

对列表进行子设置来访问各个图
list_plots[[6]]

enter image description here

list_plots[[7]]

enter image description here

答案 1 :(得分:0)

我们可以使用walk中的purrr

library(purrr)
library(ggplot2)    

list_plots <- walk(nba[-1], ~ 
   ggplot(nba, aes(x= MIN, y = .x, colour="green", label=Name))+
       geom_point() +
       geom_text(aes(label= ifelse(data > quantile(data, 0.95),
       as.character(Name),'')),hjust=0,vjust=0))

并使用list获得pluck元素

pluck(list_plots, 4)