【问题标题】:How to plot min and max of two columns per row as a scatterplot如何将每行两列的最小值和最大值绘制为散点图
【发布时间】:2012-05-18 14:42:08
【问题描述】:

我有一个看起来像这样的数据框:

| id | length_bgn | length_end |
--------------------------------
| 1  |   209      |    215     |
| 2  |   324      |    125     |
| 3  |   167      |    156     |
| .. |   ...      |    ...     |
--------------------------------

我想制作一个散点图,其中 X 轴上的长度(每行)最小值和 Y 轴上每行的最大值。我试过了:

qplot(min(length_bgn, length_end), max(length_bgn, length_end), data=df)

但是,这会绘制两列最小值与两列最大值的单个点。我是否使用了错误的功能?或者以某种方式操纵数据框会更好吗?请原谅任何天真,我对 R 和 ggplot2 还是很陌生。

任何帮助将不胜感激。

编辑:使用上述代码的示例图:

【问题讨论】:

  • 您的解释必须更清楚。我在您的 df 中每行只看到三个值,其中只有一个是 length_bgn。你在做什么?
  • 抱歉,我正在尝试绘制,例如 id==2、x=125 和 y=324。 IE。我希望每行的最小值与每行的最大值相对。我希望这更清楚,但如果没有,请告诉我。
  • 啊,我明白了。您将需要重新排列您的 df 以便列对应于您要绘制的变量。即每行中的最小值都应该在一列中。我会使用apply 进行两次调查。
  • id 列是唯一的。这就是我的意思,min(length_bgn, length_end),就像这两列之间的最小值,每行。我只是不确定如何在 ggplot2 中正确执行此操作;如果有帮助,我将发布一个示例图。

标签: r ggplot2 data-manipulation


【解决方案1】:

编辑

library("ggplot2")

df <- read.table(text = " id  length_bgn  length_end 
        1     209          215     
 2     324          125     
 3     167          156     ", header=TRUE)

df$x <- apply(df[,c(2,3)], 1, min)
df$y <- apply(df[,c(2,3)], 1, max)


qplot(x, y, data=df)

【讨论】:

    【解决方案2】:

    @gauden 的解决方案很好(在绘图前进行处理),但如果您真的希望 ggplot 也为您完成这项工作,您可以。 [使用@gauden 提供的df。]

    qplot(pmin(length_bgn, length_end), pmax(length_bgn, length_end), data=df)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-24
      • 1970-01-01
      • 2015-07-19
      • 2015-01-09
      • 2017-06-22
      • 1970-01-01
      • 2020-05-16
      相关资源
      最近更新 更多