3

以下の簡単なデータがあります。「V」とD1、D2、D3の値を並べた棒グラフとして、累積合計CS1、CS2、CS3を線として、異なるYスケールでプロットしたいと思います。最初の図に示すように、横並びの棒グラフをプロットするのは比較的簡単ですが、CS1-CS3列の線プロットを追加するのは難しいと感じています。最終的なプロットは2番目の図のようになり ますあなたの助けをありがとう

V   D1  D2  D3  CS1 CS2 CS3
10  2038    1806    1643    72.81171847 64.52304394 58.69953555
20  550 709 757 92.46159343 89.85351911 85.7449089
30  142 192 271 97.53483387 96.71311183 95.42693819
40  45  61  80  99.14255091 98.89246159 98.28510182
50  12  20  30  99.57127546 99.6070025  99.35691318
60  5   6   10  99.74991068 99.82136477 99.71418364
70  2   2   3   99.82136477 99.89281886 99.82136477
80  4   1   2   99.96427295 99.92854591 99.89281886
90  1   0   1   100.0000000 99.92854591 99.92854591
100 0   1   0   100.0000000 99.96427295 99.92854591
4

2 に答える 2

8

まず、barplot をプロットしてオブジェクトとして保存する必要があります。このオブジェクトには、バーの x 座標が含まれています。最大値が 39.5 なので、 に設定しxlim=c(0,40)ます。

mp<-barplot(as.matrix(t(df[,2:4])),beside=TRUE,xlim=c(0,40),ann=FALSE)
mp
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]  1.5  5.5  9.5 13.5 17.5 21.5 25.5 29.5 33.5  37.5
[2,]  2.5  6.5 10.5 14.5 18.5 22.5 26.5 30.5 34.5  38.5
[3,]  3.5  7.5 11.5 15.5 19.5 23.5 27.5 31.5 35.5  39.5

新しいプロットを追加するには、 を使用しますpar(new=TRUE)plot()次に、最初の行とlines()他の行に追加します。新しいプロットの x 値として、mpオブジェクトの 2 行目 (中央のバー) を使用しました。axis()軸の目盛りを設定するために使用される関数。

par(new=TRUE)
plot(mp[2,],df$CS1,xlim=c(0,40),type="l",col="red",axes=FALSE,ylim=c(0,100),ann=FALSE)
lines(mp[2,],df$CS2,col="blue")
lines(mp[2,],df$CS3,col="green")
axis(1,at=mp[2,],labels=df$V)
axis(4,at=seq(0,100,10))
box()

ここに画像の説明を入力

于 2013-03-07T17:51:57.380 に答える
1

TeachingDemos パッケージのupdateusr関数を使用すると、既存のプロットの座標系を変更する必要がなくpar(new=TRUE)、それに伴う潜在的な問題を回避できます。

twoord.plot別のオプションとして、plotrix パッケージの関数を調べることもできます。

同じプロットに 2 つの座標系があると、混乱を招くことがあります。重複がなく、スケールが完全に独立し、上部のプロットが短くなる可能性があるように、垂直に積み重ねられた 2 つの位置合わせされたプロットを作成する方がよい場合があります。関数は、このlayout配置に役立ちます。

于 2013-03-07T19:02:47.237 に答える