ggplotボックスプロットの外れ値に、外来データが観察された対象の名前を付けたいとします。外れ値ラベルがggplot2ボックスプロットに正しく割り当てられていない
is_outlier <- function(x) {
return(x < quantile(x, 0.25) - 1.5 * IQR(x) | x > quantile(x, 0.75) + 1.5 * IQR(x))
}
をそしてsafe_ifelse
回避策が要因で適切に機能するためにifelse
を取得するには:
私は、外れ値を識別するための簡単な関数を作成することで進めてきました。ここから
safe.ifelse <- function(cond, yes, no) {
class.y <- class(yes)
if (class.y == "factor") {
levels.y = levels(yes)
}
X <- ifelse(cond,yes,no)
if (class.y == "factor") {
X = as.factor(X)
levels(X) = levels.y
} else {
class(X) <- class.y
}
return(X)
}
、私は外れ値が正しく識別されますが、それが必要として、標識は動作しませんhttps://www.dropbox.com/s/2pcuuclxiqw1va1/data.csv?dl=0
library(dplyr) data<-subset(data,data$variable1!='NA')
p1<-
data %>%
group_by(season,location) %>%
mutate(outlier=safe.ifelse(is_outlier(variable1),subject,as.numeric(NA))) %>%
ggplot(aes(x=factor(season),y=variable1))+
geom_boxplot()+
facet_wrap(~location,nrow=2)+
guides(fill=FALSE)+
geom_text(aes(label=outlier),na.rm=TRUE,hjust=1.5,size=2.5)
でプロットデータを生成するためにdplyr
パイプラインを介してデータを実行しました。サブジェクト固有の異常値ラベルを取得するのではなく、3つのレベルのsubject
が繰り返し表示され、誤って(一見無作為に)印刷されます。異常値をそれらの数値でラベル付けする(すなわち、safe_ifelse
関数でsubject
からvariable1
に変更することによって)問題は発生しません。
私は何かここに明白なものがないと思います。誰かが私が間違っている場所を親切に指摘するかもしれません。
おかげで、 アンドレアス
完了 - ありがとう@ポールシューズ! –