我的数据如下:
> 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
我想以最小dat$tp
到最大的相反顺序绘制它们。
但是,这段代码按照上面的顺序绘制它们(即从最大到最小)。
> 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轴&amp; y轴坐标应从最小值到最大值
以下显示了我当前代码的结果。
请注意,该行从0,0开始,然后再次“返回”0。 我们想避免它回到0。
答案 0 :(得分:4)
啊,我明白了。
这是因为lines
按照给定的顺序在点之间绘制线条。
有几种方法可以解决这个问题:
在type='l'
命令中执行plot
,然后无需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)
。只要(0,0)
中的tp
和fp
中的dat
排成一行,您就会获得(0,0)
点。
排序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"))
答案 1 :(得分:0)
#Get order of rows
idx <- order(dat$tp)
#Select data in sorted order
sorted <- dat[idx,]