4

値(mean)がとで指定された間隔内に収まるか収まらないデータセットがlower.boundありupper.boundます。これを使ってプロットしたいと思いますlatticeが、本当に素晴らしいことを達成しましたが、まだ3つ欠けていることがあり、取り組む方法がわかりません(私は比較的新しいですlattice)。

df <- read.table("http://pastebin.com/raw.php?i=FQh6F12t")

require(lattice)
lattice.options(default.theme = standard.theme(color = FALSE))

head(df)
##    code topic problem mean lower.bound upper.bound consistent
## 7  A04C  coke      MP 99.5       36.45       95.95          0
## 8  A04C  coke      MT 47.5       22.78      100.00          1
## 11 A04C  girl      MP 50.0        4.75        9.75          0
## 12 A04C  girl      MT 99.5       20.00      100.00          1
## 23 A14G  coke      MP 88.5       21.25       66.75          0
## 24 A14G  coke      MT 82.5       48.36      100.00          1    

dotplot(lower.bound + mean + upper.bound ~ code | problem * topic, 
       data = df, pch = c(6, 3, 2), scales = list(x = list(draw = FALSE)),
       as.table = TRUE)

これにより、次のものが生成されます。 ここに画像の説明を入力してください

下向き矢印/三角形は下限を示し、上向き矢印/三角形は上限を示し、+マークはmean。次のことをプロットに追加したいのですが、方法がわかりません(明らかにパネル機能をカスタマイズする以外に):

  1. 値が間隔内にpchあるかどうかに基づく条件付き。mean変数consistentはこれを示します(0 =間隔外)。間隔内の値と間隔外の値に使用するpch必要があります。(下限と上限のpchは変更しないでください)13
  2. 間隔をマークします。lower.boundupper.bound各x軸ティックの間に太い線を引きたいと思います。
  3. 間隔の外側の値の比率をパネルヘッダー(たとえば、MP; 58.6%左上隅のパネル)に追加します。

1と2の場合、私の問題は明らかに、複数のy変数がある場合にカスタムパネル関数を処理する方法(つまり、これに基づいて条件付きパネル関数を作成する方法)がわからないことです。しかし、何も見つかりませんでした。

3の場合、間隔外の値の比率は次のようになります。

1 - with(df, tapply(consistent, list(topic, problem), mean))
##          MP     MT
## coke 0.5862 0.1724
## girl 0.8276 0.1724

答えにさらにx軸上のレベルの適切な順序が含まれている場合、それは間違いなくプラスになります。順序はすべてのパネルで変更できます(つまり、上下のパネルでも、同じx軸の目盛りが異なるレベルに対応する可能性がありますcode)。しかし、これは重要ではありません。

4

1 に答える 1

3

まあ、これは本当にきれいではありませんが、それは本当の仕事(この種のプロットを機能させる方法をあなたに示す)を成し遂げるはずです。

基本的な考え方は、LHS(つまり)に名前がたくさんないように数式を書き直すことlower.bound + mean + upper.boundです。その構文は、用語を指定することと同じです。これは、必要に応じてカスタマイズするのが面倒なgroups=トリガーになります。panel.superpose()

代わりにmean、LHSに含めるだけsubscriptsで、カスタムパネル関数の内部を使用して、それぞれの場合にとの一致する要素を選択しupper.boundますlower.bound

私は残りがかなり自明であることを願っています:

LABS <- LETTERS[1:4]
with(df,
     dotplot(mean ~ code | problem * topic,
             lb=lower.bound, ub=upper.bound, mpch = c(3,1)[consistent+1],
             ylim = extendrange(c(0,100)),
             panel = function(x, y, lb, ub, mpch, ..., subscripts) {
                 panel.dotplot(x, y, ..., pch=mpch[subscripts])
                 lpoints(x, lb[subscripts], pch=6)
                 lpoints(x, ub[subscripts], pch=2)
                 lsegments(x,lb[subscripts],x,ub[subscripts],col="grey60")
                 ltext(x=x[3], y=95, LABS[panel.number()], col="red",fontface=2)
             },
             scales = list(x = list(draw = FALSE)), as.table = TRUE)
     )

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

于 2013-05-16T01:35:27.293 に答える