1

一部の変数が相対的な変動をほとんど示さず、他の変数が大きな変動を示すデータ フレームがあります。たとえば、次のデータ フレームを考えてみましょう。

df <- data.frame(IDX = 1:10, V1 = runif(10) + 100000, V2 = runif(10))

次の内容で:

   IDX       V1         V2
1    1 100001.0 0.39601382
2    2 100000.1 0.76472032
3    3 100000.1 0.10183021
4    4 100000.2 0.12735142
5    5 100000.8 0.21488898
6    6 100000.1 0.92675265
7    7 100000.5 0.27987290
8    8 100000.6 0.69132304
9    9 100000.5 0.20719782
10  10 100000.8 0.02314787

両方の変数の絶対変動は類似しています (V1 では 0.10、V2 では 0.09)。しかし、それらの平均に対する相対変動を考慮すると、V1 の変動は非常に小さく、V2 の場合は逆になります。

> var(df$V1) / mean(df$V1)
[1] 1.082472e-06
> var(df$V2) / mean(df$V2)
[1] 0.2617366

問題は、両方の変数のドットプロットを作成しようとしたときに発生し、X スケールの制限を設定しようとしました。各変数に同じスケールを使用すると ( relation = 'same'、既定の設定)、次の結果が得られます。

プロット1

ここに、プロットの作成に使用されるコードがあります。

library(lattice)
library(reshape2)
df <- melt(df, id.vars = 'IDX')

# approach 1
pl <- dotplot(IDX ~ value | variable, df,
              scales = list(x = list(relation = 'same')))
print(pl)

ご覧のとおり、V2 の値は非常に小さいため、両方のパネルに同じスケールを使用すると、V2 の値にばらつきがないように見えます。各パネルの X スケールを独立させると、次のようになります。

プロット2

そして、ここに 2 番目のプロットを生成するコードがあります。

# approach 2
pl <- dotplot(IDX ~ value | variable, df,
              scales = list(x = list(relation = 'free')))
print(pl)

問題は、左側のパネルの X スケールの範囲が 100000.2 から 100001.0 になり、実際にはそうではない場合でも、データが多くの変動があるように見えることです。

どういうわけか、左パネルが最初のプロットの左パネルのように見え、右パネルが2番目のプロットの右パネルのように見えるプロットを取得したいと思います。私の考えは、プロットされている変数の平均に基づいて X 範囲を定義することでした。たとえば、各パネルの X 制限を から0.9 * meanに変更でき1.1 * meanます。しかし、複数の変数 (およびパネル) が存在する場合にそれを行う方法がわかりません。

4

3 に答える 3

2

最もクリーンな解決策は、おそらく独自のprepanel関数を提供することです。これにより、各パネルの x 制限が「オンザフライ」で設定されます。以下は、xlim を 0 からパネルに存在する x の最大値まで拡張するように設定する例です。

dotplot(IDX ~ value | variable, df, scales=list(relation="free"),
        prepanel = function(x,y,...) list(xlim=c(0, max(x))))

ここに画像の説明を入力

于 2013-01-10T21:44:52.693 に答える
1

xyplot (および dotplot) のヘルプ ページは、これが可能であることを示唆しています。各パネル (必要に応じて複製された後)。"

試してください(編集済み):

pl <- dotplot(IDX ~ value | variable, df, 
          xlim=list(c(1,100001), c(0, 1) ),
          scales = list(x = list(relation = 'free'   )
                       ))
print(pl)

ここに画像の説明を入力 編集が必要だったのは、最初に xlim を scales 引数の中に入れようとしたためです (結局、そこからテキストのセクションを取得しました)。この場合、さらに作業が必要になるか、順序を入れ替えるか、 100000 の次数「0」は、2 番目のスケールの「0.0」に「ぼかし」ます。

于 2013-01-10T20:13:38.410 に答える
0

アイデアは、適用することですlog

df <- data.frame(IDX = 1:10, V1 = log(runif(10) + 100000), V2 = runif(10))

library(lattice)
library(reshape2)
df <- melt(df, id.vars = 'IDX')

# approach 1
pl <- dotplot(IDX ~ value | variable, df,
              scales = list(x = list(relation = 'same')))
print(pl)

ここに画像の説明を入力

于 2013-01-10T18:54:03.843 に答える