【问题标题】:Gnuplot does not plot (blank) a contour mapGnuplot 不绘制(空白)等高线图
【发布时间】:2019-07-02 14:51:48
【问题描述】:

我是 gnuplot 的新手,正在尝试使用文本文件中的 xyz 数据绘制等高线图。 我尝试了许多不同的方法,但它只给出了空白图。

数据在 Google 云端硬盘中:https://drive.google.com/open?id=1x-NAD9Vs8wyv9QbDgjcaT9SujHlHChAd

set contour base
set pm3d
unset surface
set view map
set xrange [1000:4000]
set yrange [0.2:0.395]
set zrange [0:40000]
splot "relax.txt" using 1:2:3

以下错误消息: 警告:单个等值线(扫描)对于 pm3d 绘图是不够的。 提示:数据文件中缺少空行?请参阅“帮助 pm3d”和常见问题解答。

【问题讨论】:

    标签: 2d gnuplot contour


    【解决方案1】:

    问题是 gnuplot 需要在每个(矩阵)行之后有一个空行(例如,当第 1 列的值发生变化时)。 因此,您可以自己手动或使用外部工具插入空行,或者让 gnuplot 执行此操作。您将数据绘制到虚拟表(数据块)中,然后将其打印到另一个数据块并在第 1 列的值更改时插入一个空行。有点麻烦,但很有效。需要 gnuplot >=5.2。

    代码:

    ### contour plot, addding empty lines to raw data
    reset session
    set contour base
    set pm3d
    set cntrparam level 10
    unset surface
    set view map
    set size 0.9,0.9    # shrink the size a little otherwise colorbar numbers will be outside canvas
    
    ### insert empty lines everytime when column 1 changes its value
    
    set table $Dummy                                        # initialize a table (datablock) named $Dummy
        plot "relax.txt" u 1:2:3 with table                 # plot datafile into a datablock $Dummy
    unset table                                             # close the table
    set print $Data                                         # set print output to datablock $Data
        check=""                                            # initialize your comparison variable to empty string
        do for [i=1:|$Dummy|] {                             # loop the datablock $Dummy by lines
            if (check ne word($Dummy[i],1)) { print "\n" }  # comparison: if values are not equal insert a line
            print $Dummy[i]                                 # print current line to datablock $Data
            check = word($Dummy[i],1)                       # assign latest value to variable "check"
        }
    set print                                               # close the datablock $Data
    
    splot $Data u 1:2:3 w l notitle
    ### end of code
    

    结果:

    【讨论】:

    • 感谢您的帮助。那么从 set print $Data 到 } 是行的每个块(第 1 列上相同值的集合)之间的添加空间吗? (这可能是一个愚蠢的问题,但我也是计算机编码的新手)
    • 是的,这部分正在插入您“忘记”为 gnuplot 兼容输入格式输入的空行;-)。我会在代码里放更多的cmets。
    猜你喜欢
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多