【问题标题】:gnuplot : handle tsv file with missing (empty) datagnuplot :处理缺少(空)数据的 tsv 文件
【发布时间】:2014-07-29 16:33:30
【问题描述】:

我想绘制一个缺少一些数据的 tsv 文件。我正在寻找一种让 gnuplot 识别空数据的方法。据我尝试,gnuplot 似乎将a\t\tc 行处理为[a,c],但我希望它将数据视为[a,empty,c]

我有一个文件,data.tsv,如下所示:

data1     data2     data3
1.2       12.4      129.3
2.4       32.4      134.8
3.2                 121.5
3.4       15.4      214.5

请考虑使用\t 分隔数据。也就是说,第 0 行是“data1\tdata2\tdata3\n”,第 3 行是“3.2\t\t121.5\n”。请注意,在第 3 行中,缺少 data2 的值。

当我告诉 gnuplot

set datafile separator "\t"
plot "data.tsv" using 1:2

gnuplot 绘制数据,是的,但它在第 3 行使用 data3 的值,导致绘制 [1.2, 2.4, 3.2, 3.4][12.4, 32.4, 121.5, 15.4]

我想绘制 [1.2, 2.4, 3.4][12.4, 32.4, 15.4]。至少,我不希望121.5 进入剧情。我该怎么做?

【问题讨论】:

    标签: gnuplot


    【解决方案1】:

    我猜这是你的 gnuplot 版本中的一个错误(你有哪一个?)。您的最小脚本

    set datafile separator "\t"
    plot "data.tsv" using 1:2
    

    从 4.6.4 版开始,我在 Linux 上运行良好。对于 4.6.3 和以前的版本,我确实也看到了您的问题。

    【讨论】:

    • 遗憾的是,我使用的是 4.4 版。我很高兴知道升级解决了这个问题。谢谢!
    • +1 用于发现错误。 @Yosh 如果您卡在旧版本上,请参阅我的答案以了解解决此问题的方法。
    【解决方案2】:

    如果您卡在旧版本的 gnuplot 上并想解决这个问题,您可以使用 awk 更改数据格式:

    $ awk -F'\t' -v OFS=',' '{$1=$1}1' data.tsv
    1.2,12.4,129.3
    2.4,32.4,134.8
    3.2,,121.5
    3.4,15.4,214.5
    

    这个简短的 awk 脚本将输入中的制表符转换为输出中的逗号。 $1=$1 分配只是让 awk 接触文件的一种方式。末尾的 1 始终计算为 true,因此打印了该行。

    你可以直接在gnuplot中使用这个:

    set datafile separator ","                                   
    plot "<awk -F'\t' -v OFS=',' '{$1=$1}1' data.tsv" using 1:2
    

    【讨论】:

      猜你喜欢
      • 2020-04-01
      • 2015-07-23
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多