【问题标题】:Sorting values in for plotting in R排序值以在 R 中绘图
【发布时间】:2012-03-28 14:10:21
【问题描述】:

我的数据如下所示:

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

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

请注意,这条线从 0,0 开始,然后又“返回”到 0。 我们希望避免它回到 0。

【问题讨论】:

  • 我对你想要的输出感到困惑——不管行的顺序是什么,(fp,tp) 图总是看起来像从 (0,0) 向上的对角线向右?例如在绘图上绘制 (0,0) 和 (1,1) 的顺序无关紧要;这条线看起来还是一样的。
  • @mathematical.coffee:我用图更新了 OP。它澄清了吗?

标签: r sorting graph plot


【解决方案1】:

啊,我明白了。

这是因为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_maxtp_max,您将包含点 (fp_max,tp_max)。只要在dat 中有(0,0)tpfp 的行,您也将获得(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"))
    

【讨论】:

    【解决方案2】:
    #Get order of rows
    idx <- order(dat$tp)
    
    #Select data in sorted order
    sorted <- dat[idx,]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-26
      • 2013-03-16
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      相关资源
      最近更新 更多