【问题标题】:Gnuplot downsample and average 3d plot in gnuplot with NaNGnuplot 下采样和平均 3d 图在 gnuplot 中与 NaN
【发布时间】:2014-09-10 15:30:37
【问题描述】:

我正在使用 splot "testdata.txt" 非均匀矩阵

data.txt 在某些地方稀疏而在其他地方密集。我想平均密集值以减少图中的噪音。显而易见的方法是

设置 dgrid3d

但是,当文件包含“NaN”时,似乎没有绘制任何内容。

set zrange [0:4]
splot "testdata.txt" nonuniform matrix
set dgrid3d
splot "testdata.txt" nonuniform matrix

示例数据:

4 1 2 3
1 0 1 2
2 1 2 3
3 2 3 NaN

如何实现下采样?

【问题讨论】:

    标签: 3d gnuplot nan


    【解决方案1】:

    按照 Bernhard 的建议,过滤掉“NaN”值的问题在于,它还会删除“NaN”值的同一行中的所有数据。如果您可以在没有这些数据的情况下进行操作,那么这是一种继续进行的方法。如果您想保留该数据,那么我建议您将“NaN”更改为您不希望出现的非常具体的数字,并使用它来告诉 gnuplot 忽略那些使用带有1/0 选项的条件图的人:

    splot "< sed 's/NaN/12345/g' testdata.txt" nonuniform matrix \
    u 1:2:($3 == 12345 ? 1/0 : $3)
    

    【讨论】:

    • 你能不能不要$3==NaN
    • 我认为1/0 会弄乱网格结构并且不允许使用with lines。但是您的解决方案效果很好:)
    • 谢谢。希望 1/0 能够顺利实施。
    • 为什么splot '&lt; sed "s/NaN/1\/0/g" testdata.txt' nonuniform matrix 会产生值 3、3、3?
    • 我认为产生的 z 值小于 3。无论如何它是使用插值的产物。您可以对 dgrid3d 使用不同的插值方案。尝试列表的帮助。
    【解决方案2】:

    至少使用 gnuplot 4.6.3,NaN 会自动设置为零。使用脚本

    set dgrid3d
    set ticslevel 0
    splot 'testdata.txt' nonuniform matrix w l notitle
    

    给出(4.6.3):

    如果将 NaN 值设置为零的猜测对您来说是错误的,您应该使用非网格数据格式

    <x0> <y0> <z0>
    <x1> <y1> <z1>
    etc.
    

    因为您无论如何都在使用dgrid3d 创建网格数据。然后你也可以使用 Bernhard 的解决方案来过滤掉 NaN 值。

    【讨论】:

    • 假设 NaN=0 是 gnuplot 中的错误吗?考虑到它似乎覆盖了“设置数据文件丢失”?
    • 把一个巨大的非均匀矩阵变成非网格化的数据格式似乎有点不切实际。
    • 也许可以,但是以矩阵格式存储稀疏矩阵也不是最佳选择。我一直将我庞大的实验数据集存储为hdf5 数据文件,然后您可以使用splot '&lt; h5totxt -s " " file.h5' ... 即时转换(可能带有过滤)。
    猜你喜欢
    • 1970-01-01
    • 2018-03-26
    • 2020-10-16
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    相关资源
    最近更新 更多