带图像的半透明图

Semitransparent plot with image

我正在尝试绘制两个组合的矩阵,其中一个矩阵应该是半透明的。我需要它,因为实验数据有缺失值,我更愿意将插值数据与测量数据区分开来。网格点相同。 Gnuplot 版本为 5.2,补丁级别 8。

实验数据好像

8.8128  6.7424  nan
8.8128  6.9776  nan
8.8128  7.2128  nan
..
8.8128  10.976  122.2
..
8.8128  15.2096 nan
8.8128  15.4448 nan

并插值(无缺失值):

8.8128  6.7424  126.1199426176991
8.8128  6.9776  126.1199426176991
8.8128  7.2128  126.1199426176991
..
8.8128  10.7408 122.21158160029502
8.8128  10.976 122.21158160029502
8.8128  11.2112122.21158160029502
..
8.8128  15.2096 129.1679877531613
8.8128  15.4448 129.1679877531613

如果用pm3d绘制实验数据,很多点都丢失了。 plot with image 产量

插值数据,同样的命令:

插值数据可以用 pm3d + set style fill transparent solid 0.5 noborder 绘制,但是在多图模式下图像的尺寸非常不合适。

这两个文件基本上都可以(预,post)以任何可能的方式处理,因为数据集是使用 Python.

生成的

是否可以合并这两个数据集,不透明和透明? 谢谢。

找到:

- 这个问题是关于绘图 .png
Assigning transparency to certain elements of a matrix in pm3d map - 这是最接近的,但没有颜色框,xscale 和 yscale 也丢失了。

你可以试试with boxxyerror.

我使用以下 python 脚本生成一些数据:

import random
import math

N = 100

with open("i.dat", 'w') as interpolationfile, open("m.dat", 'w') as measurementfile:
    for x in range(N):
        interpolationfile.write('\n')
        for y in range(N):
            value = 0.5 + 0.5*math.sin(2*math.pi*x*y/(N*N))
            datastring = f"{x+0.5} {y+0.5} {value}\n"
            interpolationfile.write(datastring)
            if random.randint(0, 100) > 90:
                measurementfile.write(datastring)

gnuplot 脚本:

reset

set terminal pngcairo  # directly plot to file, my qt-terminal shows strange artifacts
set output "output.png"

set nokey
set cbrange [0:1]

plot "i.dat" u 1:2:(0.5):(0.5):3 with boxxyerror fillcolor palette fillstyle transparent solid 0.2 noborder ,\
     "m.dat" u 1:2:(0.5):(0.5):3 with boxxyerror fillcolor palette fillstyle solid

using 1:2:(0.5):(0.5):3中的参数为using <x-column>:<y-column>:<box-width x>:<box-width y>:<color in palette>。我的示例数据具有整数 xy 坐标,因此我的框宽度和高度为 1(或每个方向为 0.5)。括号中的 (0.5) 使用这些固定的框大小。

详情请参阅help boxxyerror,也可以在输入文件的单独列中为框定义绝对角坐标。

如果没有用于插值数据的 noborder,框周围会有不透明的边框。

这是结果: