对R中的绘图进行排序

时间:2012-03-12 06:30:10

标签: r sorting graph plot

我的数据如下:

> 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轴坐标应从最小值到最大值

以下显示了我当前代码的结果。 Figure

请注意,该行从0,0开始,然后再次“返回”0。 我们想避免它回到0。

2 个答案:

答案 0 :(得分:4)

啊,我明白了。

这是因为lines按照给定的顺序在点之间绘制线条。

有几种方法可以解决这个问题:

  1. 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_maxtp_max定义,您已经包含了点(fp_max,tp_max)。只要(0,0)中的tpfp中的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"))
    

答案 1 :(得分:0)

#Get order of rows
idx <- order(dat$tp)

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