2012-03-12 6 views
0

にプロットするために、私は次のようになり、データがあります:私は小さいdat$tpから最大に逆の順序でそれらをプロットしたいソート値R

> print(dat) 
    cutoff tp fp 
1 0.6 414 45701 
2 0.7 172 16820 
3 0.8 51 4326 
4 0.9 49 3727 
5 1.0 0  0 

を。 しかし、このコードでは、上記のように順にプロットしています(つまり、最大から最小)。

> fp_max <- max(dat$fp); 
> tp_max <- max(dat$tp); 
> op <- par(xaxs = "i", yaxs = "i") 
> plot(tp ~ fp, data = dat, xlim = c(0,fp_max),ylim = c(0,tp_max), type = "n") 
> with(dat, lines(c(0, fp, fp_max), c(0, tp, tp_max), lty=1, type = "l", col = "black")) 
> lines(par()$usr[1:2], par()$usr[3:4], col="red") 

問題を解決するために上記のコードを変更するにはどうすればよいですか?もちろん

、x軸& y軸座標が最小から最大値までであるべきである

以下は私の現在のコードの結果を示しています。 Figure

行が0,0で開始し、再び0に戻ることに注意してください。 0に戻ることを避けたい。

+0

私はあなたが望む出力するよう困惑している - 行がにされている順序かは重要ではありません'(fp、tp)'プロットは常に(0,0)から上に向かって対角線のように見えますか?例えばプロットで(0,0)と(1,1)を描画する順序は関係ありません。その線は同じように見えます。 –

+0

@ mathematical.coffee:私は数字でOPを更新しました。はっきりしていますか? – neversaint

答えて

4

ああ、わかっています。

linesは、指定された順番で点の間に線を引くためです。

あなたがこの問題を回避でき、いくつかの方法があります。

  1. があなたのplotコマンドでtype='l'を行い、その後with(dat,lines(...))は必要ありません。

    # can also do the col='black',lty=1 in here. 
    plot(tp ~ fp, data = dat, xlim = c(0,fp_max),ylim = c(0,tp_max), type = "l") 
    

    そのあなたの定義により、 fp_maxおよびtp_maxの場合は、ポイント(fp_max,tp_max)が既に含まれています。 tpfpの行が(0,0)の場合、datには(0,0)と表示されます。

  2. ソートdat$tp、あまりにもdat$fpをソートするためにそれを使用:

    plot(tp ~ fp, ..., type='n') 
    # sort dat$tp 
    obj <- sort(dat$fp,index.return=T) 
    # use obj$x as tp and obj$ix to sort dat$fp prior to plotting 
    with(dat, 
        lines(c(0, obj$x, fp_max), c(0, tp[obj$ix], tp_max), 
          lty=1, type = "l", col = "black")) 
    
0
#Get order of rows 
idx <- order(dat$tp) 

#Select data in sorted order 
sorted <- dat[idx,]