9

以下に示す作業例でx呼び出されたデータフレームから呼び出された変数から分位数-分位数プロットを作成しています。データセットの変数でdfポイントにラベルを付けたいと思います。namedf

苦痛な解決策に頼ることなくggplot2でこれを行うことは可能ですか(理論的な分布を手でコーディングし、それを経験的なものに対してプロットします)?

編集:そうです、回答を投稿してから削除したユーザーのおかげです。以下のアルンの答えの後のコメントを参照してください。を使った巧妙な解決策を提供してくれたDidzisに感謝しggbuildます。

# MWE
df <- structure(list(name = structure(c(1L, 2L, 3L, 4L, 5L, 7L, 9L, 
10L, 6L, 12L, 13L, 14L, 15L, 16L, 17L, 19L, 18L, 20L, 21L, 22L, 
8L, 23L, 11L, 24L), .Label = c("AUS", "AUT", "BEL", "CAN", "CYP", 
"DEU", "DNK", "ESP", "FIN", "FRA", "GBR", "GRC", "IRL", "ITA", 
"JPN", "MLT", "NLD", "NOR", "NZL", "PRT", "SVK", "SVN", "SWE", 
"USA"), class = "factor"), x = c(-0.739390016757746, 0.358177826874146, 
1.10474523846099, -0.250589535389937, -0.423112615445571, -0.862144579740376, 
0.823039669834058, 0.079521521937704, 1.08173649722493, -2.03962942823921, 
1.05571087029737, 0.187147291278723, -0.144770773941437, 0.957990771847331, 
-0.0546549555439176, -2.70142550075757, -0.391588386498849, -0.23855544527369, 
-0.242781575907386, -0.176765072121165, 0.105155860923456, 2.69031085872414, 
-0.158320176671995, -0.564560815972446)), .Names = c("name", 
"x"), row.names = c(NA, -24L), class = "data.frame")

library(ggplot2)
qplot(sample = x, data = df) + geom_abline(linetype = "dotted") + theme_bw()

# ... using names instead of points would allow to spot the outliers

私はこの要点の適応に取り組んでおり、CVユーザーが関心を持つ可能性のある回帰診断について質問がある場合は、CrossValidatedに他の質問を送信することを検討します。

4

3 に答える 3

11

元のQQプロットをオブジェクトとして保存できます(代わりに関数ggplot()を使用)stat_qq()qplot()

g<-ggplot(df, aes(sample = x)) + stat_qq()

次に、関数ggplot_build()を使用して、プロットに使用されるデータを抽出できます。それらは要素に格納されますdata[[1]]。それらのデータを新しいデータフレームとして保存しました。

df.new<-ggplot_build(g)$data[[1]]
head(df.new)
           x          y     sample theoretical PANEL group
1 -2.0368341 -2.7014255 -2.7014255  -2.0368341     1     1
2 -1.5341205 -2.0396294 -2.0396294  -1.5341205     1     1
3 -1.2581616 -0.8621446 -0.8621446  -1.2581616     1     1
4 -1.0544725 -0.7393900 -0.7393900  -1.0544725     1     1
5 -0.8871466 -0.5645608 -0.5645608  -0.8871466     1     1
6 -0.7415940 -0.4231126 -0.4231126  -0.7415940     1     1

これで、観測のデータフレーム名をhewに追加できます。重要なのはorder()、新しいデータフレームのデータが注文されるときに使用することです。

df.new$name<-df$name[order(df$x)]

geom_point()次に、を提供する代わりに、通常どおりに新しいデータフレームをプロットしますgeom_text()

ggplot(df.new,aes(theoretical,sample,label=name))+geom_text()+ 
  geom_abline(linetype = "dotted") + theme_bw()

ここに画像の説明を入力してください

于 2013-02-19T13:55:23.753 に答える
6

ポイントが近すぎます。私はこのようなことをします:

df <- df[with(df, order(x)), ]
df$t <- quantile(rnorm(1000), seq(0, 100, length.out = nrow(df))/100)

p <- ggplot(data = df, aes(x=t, y=x)) + geom_point(aes(colour=df$name))

これは与える:

ここに画像の説明を入力してください

プロット内にラベルを付けることを主張する場合は、次のようなことを試すことができます。

df <- df[with(df, order(x)), ]
df$t <- quantile(rnorm(1000), seq(0, 100, length.out = nrow(df))/100)

p <- ggplot(data = df, aes(x=t, y=x)) + geom_point(aes(colour=df$name))
p <- p + geom_text(aes(x=t-0.05, y=x-0.15, label=df$name, size=1, colour=df$name))

p

ここに画像の説明を入力してください

xと座標をいじってみることyができ、必要に応じていつでも色の美学を取り除くことができます。

于 2013-02-19T13:54:40.320 に答える
0

@Arunは上記のコメントで良い解決策を持っていますが、これはR4.0.3で機能します。

ggplot(data = df, aes(sample = x)) + geom_qq() + geom_text_repel(label=df$name[order(df$x)], stat="qq") + stat_qq_line()

基本的に同じことですが、の一部として追加stat_qq_line() [order(df$x)]labelれています。関数を含めないorderと、ラベルはすべて故障し、非常に誤解を招く可能性があります。

これが他の誰かの人生の数時間を節約することを願っています。

于 2021-04-06T05:14:05.467 に答える