7

複数の行を ggplot2 の単一の「クラス」の一部としてプロットしようとしています。次のようなものをプロットできます。

5 クラスの画像

しかし、私の問題は、n1、n2、および n3 を単一のクラスとして表示したいということです (凡例に単一の名前を持つそれぞれの灰色の細い線)。

私の問題は、それらをグループ化するためにデータ フレームに新しい要素を作成すると、n1 の終わり (右上) から n2 (左下) の始まりまで追加接続を描画して、対角線を追加することです。私のグラフ:

1 つのクラスのグラフ

それは私が望むものに近いですが、追加の対角線があります. 重要な場合は、ROCR を使用してこれらを計算し、結果のperformanceオブジェクトから x 点と y 点を抽出して、これらの線を生成します。

4

2 に答える 2

2

ここに 1 つの方法がありますが、あまり気に入らないと思います。

d1 <- data.frame(x = 1:10,
                 y = rep(1:2,each = 5),
                 grp = factor(rep(letters[1:2],each = 5),levels = letters[1:3]))
d1 <- rbind(d1,data.frame(x = 1:2,y = c(NA,NA),grp = c('c','c')))

d2 <- data.frame(x = 1:15,
                 y = rep(3:5,each = 5),
                 grp = rep(1:3,each = 5))   

ggplot() + 
    geom_line(data = d1,aes(x = x,y = y,group = grp,colour = grp)) + 
    geom_line(data = d2,aes(x = x,y = y,group = grp),colour = "blue")

ここに画像の説明を入力

このソリューションは、他の種類のデータではうまく機能しないことに注意してください。凡例の同じカテゴリにマージしたい 3 つの線のそれぞれが、基本的に同じ場所で始まり、終わるということが起こります。そうしないと、不要なコネクタ ラインができてしまいます。

上記の方法はより一般的に機能しますが、ご覧のとおり、それほど厄介ではありません。どちらかといえば不便です。

この種の問題は何度も発生しており、より簡単な解決策を忘れている可能性があります。ただし、一般的には、すべての凡例を手動で作成する必要がなくなる ggplot2と引き換えに、(常にではありませんが頻繁に) ベース グラフィックスと比較してある程度の柔軟性が犠牲になっていることに注意してください。

于 2012-07-13T21:33:41.280 に答える
0

このグラフをプロットしようとしたときに、 rbindROCR オブジェクトの項目をperformance直接 data.frame にしました。中間クラスのデータの順序を逆にすることで、右上から左下への移動をカットできることに気付きました。すなわち

n1 <- getPerformance(test1)
n2 <- getPerformance(test2)
n3 <- getPerformance(test3)

次のような3つのデータフレームを作成します

  type x           y
1   n1 0 0.000000000
2   n1 0 0.003448276
3   n1 0 0.006896552
4   n1 0 0.010344828
5   n1 0 0.013793103
6   n1 0 0.017241379
...
26565   n1 0.9999619 1
26566   n1 1.0000000 1

ここでの問題は、n1 を n2 にバインドすると、n1 のポイント (1,1) が n2 のポイント (0,0) に接続され、対角線が作成されることです。

私の場合、(ずさんな) 解決策の 1 つは、対角線がないように、1 行おきに順番を逆にすることでした。

n2_rev <- n2[nrow(n2):1,]
ns <- rbind(n1,n2_rev,n3)

そのため、一貫して同じ位置で開始および終了するのではなく、線が前後に移動し、次のグラフが作成されます。

希望のグラフ

それにもかかわらず、これを処理するためのより普遍的な方法があると思います。lines()ベースRの関数など、ggplot2グラフに線を追加する良い方法はありますか?

于 2012-07-13T21:18:12.813 に答える