如何在具有图像的2D图中绘制一个遮罩(图案填充)- Gnuplot。

3

I have a text file with data of the style:

0 0 123
0 1 1345
. . .
x(int) y(int) intensity(double)
. . .
0 max size y 1345
1 0 564
. . .
max size x max size y intensity last point

这些数据代表了一种物质在平面上扩散的情况,我可以通过使用1:2:3 w图像命令来绘制出不同颜色的地图。

plot data.dat u ($1):($2):3 w image

我的问题现在是:我知道我的二维平面的边界条件,也就是并不是二维平面的每一个正方形都可以扩散物质,虽然我知道在这些区域里强度为0,但我希望用图案填充来描绘这些区域。为了知道这些区域,我有另一个文件:

0 0 1
0 1 0
. . .
x(int) y(int) value
. . .
0 max size y 0
1 0 0
. . .
max size x max size y value last point

如果它是可访问区域,则值为0;如果不是,则值为1。你应该如何绘制这一部分?

1个回答

3

虽然这不是一种非常“高效”的解决方案,但为了填充图案,可以处理相应的文件,并在每个标记为“可访问”的坐标处放置一个矩形。

以下脚本首先通过stats命令确定掩码文件中的记录数量,在循环中处理此文件,并在每次迭代中提取相应的行。如果第三列中的值(保存在变量z中)等于1,则在相应位置产生一个基本矩形。

fName = 'mask.dat'
stats fName nooutput

unset key
set size ratio -1
set xtics out nomirror
set ytics out nomirror

w = 1.
h = 1.
set xr [STATS_min_x-w/2:STATS_max_x+w/2]
set yr [STATS_min_y-h/2:STATS_max_y+h/2]

#unset colorbox

do for [i=0:STATS_records-1] {
    stats fName using (x=$1, y=$2, z=$3) every ::i::i nooutput
    if(z == 1){
        set object \
            rectangle \
            center x,y \
            size w,h \
            fc rgb 'red' \
            fs transparent pattern 4 \
            noborder \
            front
    }
}

set palette defined (0 "black", 1 "white")
plot 'data.dat' u 1:2:3 w image

使用随机数据(在20x20网格上生成),这将产生: {{link1:输入图像描述}}

其实,我在考虑如何绘制方框,所以不用担心!我不确定该怎么做。非常感谢 :) - Learning from masters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接