【问题标题】:Gnuplot: How do I skip columns in matrix input to plot?Gnuplot:如何跳过矩阵输入中的列进行绘图?
【发布时间】:2015-01-29 13:27:28
【问题描述】:

我有以下形式的数据文件:

不重要1不重要2不重要3矩阵数据[i] 1e4 2e5 3e2 1 2 3 4 5 2e3 1e1 7e3 5 4 3 2 1 ……………… 2e3 1e4 4e2 4 4 4 4 4

所以它的第一行是列标题(这里是“unimportant1”到“unimportant3”)。我希望 gnuplot 忽略这前三个不重要的列,以便以指数表示法的数据条目。我希望 gnuplot 将 matrixdata 绘制为矩阵。所以就好像我是这样做的:

#!/usr/bin/gnuplot -p

plot '-' matrix with image
1 2 3 4 5
5 4 3 2 1
...
4 4 4 4 4

e

如何让 gnuplot 忽略前三列和标题行并将其余部分绘制为 矩阵图像?为了兼容性,我更喜欢内置的 gnuplot 来执行此操作,但我可以编写一个 shell 脚本并使用 `plot '

编辑: 所以neuhaus' answer 几乎解决了它。我唯一缺少的是,如何忽略带有文本标题数据的第一行(行)。每个人似乎都期望数字数据,因此整个图都失败了,因为它不是矩阵。我不想注释掉第一行,因为我将不重要的数据集用于其他 2D 绘图,而这些绘图又使用标题数据。

那么我该如何跳过已经使用every的矩阵图中的一行来跳过列?

【问题讨论】:

  • 不幸的是,这不是一个解决方案,而是一个可能的解决方案的展望:Gnuplot 5.0 有一个skip 选项,不幸的是它只能在没有matrix 的情况下工作:plot 'data.dat' skip 1 with lines。但我认为这是一个错误,对我来说plot 'matrix.dat' matrix every ::3 skip 1 with image 应该可以工作......一个非常丑陋和脆弱的黑客将使用set datafile commentschar 'u'; plot 'matrix.dat' matrix every ::3 with image
  • # 注释掉第一行会让事情变得非常简单。

标签: plot gnuplot


【解决方案1】:

使用matrix时,gnuplot 必须先解析数据文件才能跳过行和列。现在,您的第一行计算为四个无效数字,第二行有 8 个数字,我收到一个错误 Matrix does not represent a grid

如果您不想注释掉第一行或使用< tail -n +2 matrix.dat 等外部工具跳过它,那么您可以将其更改为包含一些虚拟字符串,例如

unimportant1      unimportant2    unimportant3     matrixdata[i] B C D E
1e4               2e5             3e2              1 2 3 4 5
2e3               1e1             7e3              5 4 3 2 1
...               ...             ...              ...
2e3               1e4             4e2              4 4 4 4 4

现在您的第一行的条目与其他行一样多,您可以使用

绘制此文件
plot 'test.txt' matrix every ::3:1 with image

这仍然会给你一个warning: matrix contains missing or undefined values,但你不需要关心。

【讨论】:

    【解决方案2】:

    我不熟悉矩阵图,但我得到了一些样本数据和

    plot 'matrix.dat' matrix every ::3 with image

    似乎可以解决问题。

    【讨论】:

    • 这适用于常规绘图,但不适用于矩阵数据。对不起。
    • 我可能弄错了,但如果你仔细阅读plot 'a.dat' using 1:3 只会在此处绘制 x 坐标和 z 值的二维曲线。不是所有矩阵条目的像素图。 every 中的 start end end 仅指行,而不是列。
    • 这似乎适用于列跳过。我想类似的东西会跳过第一行。谢谢!
    • 然后我得到“警告:矩阵包含缺失或未定义的值。矩阵不代表网格”。您是否像我的示例数据表一样在第一行使用文本数据测试::3:1
    • 是的。我收到同样的警告,但图像看起来不错。
    【解决方案3】:

    您可能会使用 shell 命令,例如,以下内容会跳过文件的前六行:

    plot '<tail -n +7 terrain0.dem' matrix with image
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      相关资源
      最近更新 更多