在 gnuplot 中缩放图像以匹配数据大小

Scaling image in gnuplot to match with data size

我正在尝试在范围 x=(0, 50k+) , y=(0,50k+) 的 gnuplot 中绘制数据 (x, y, z)。 但是,数据需要叠加在一个大小为(2000, 2000)的地图上。

我遇到的问题是,x 轴和 y 轴范围是 50k+,数据绘制得很好, 然而,图像是在轴的 (0, 2000) 范围映射的角中渲染的。 我需要独立于包含整个绘图区域的数据轴来渲染地图, 在 ata 范围内。以下是我正在尝试的不缩放图像的方法,

reset

set dgrid3d 200,200 qnorm 2
set xrange [0:57599]
set yrange [0:57599]

set table $Data
  splot "data.dat" using 1:2:4 
unset table

# create contour lines
set contour base
set cntrparam level incremental 0, 5, 100
unset surface

set table $Contour
  splot "data.dat" using 1:2:4 
unset table
unset key
set palette defined ( 0 "#ff0000", 40 "#0000ff", 60 "#00ff00", 100 "#e0e0e0" )
set size square
set style fill transparent solid 0.4 noborder
plot    "Map.png" binary filetype=png w rgbimage, \
        $Data u 1:2:(6):(6):3 with boxxyerror palette,\
        $Contour u 1:2:3 w l lt rgb "grey"

这就是我得到的,

这就是我想要做的,

有可以修饰的辅助关键字 binary filetype=png w rgbimage。您需要的是 dxdy(请参阅“帮助二进制关键字”)。在您的情况下,图像为 2000x2000 像素,每个像素代表一个区域 57599/2000 = 28.8,所以绘图命令变为

plot    "Map.png" binary filetype=png dx=28.8 dy=28.8 with rgbimage, \
    $Data u 1:2:(6):(6):3 with boxxyerror palette,\
    $Contour u 1:2:3 w l lt rgb "grey" 

如有必要,您可以使用关键字 origin=(x0,y0)

调整相对于绘图原点的图像位置

如果您使用的是当前版本 (5.4) 的 gnuplot

您可以将地图放置为填充绘图区域的像素图,然后在其上绘制您的绘图,而不是将地图绘制为绘图命令的一部分 with rgbimage。其语法为:

  set pixmap 1 "Map.png" at graph 0,0 size graph 1,1 back
  plot $Data u 1:2:(6):(6):3 with boxxyerror palette,\
       $Contour u 1:2:3 w l lt rgb "grey"

然而,这会失去地图坐标和地块之间的任何联系,因此确保它们匹配完全取决于您。例如,如果您缩放上面的绘图,缩放后的绘图将包含原始数据和等高线的子集,但整个地图图像仍将用于填充绘图区域。在使用 with rgbimage 的解决方案中,地图和等高线将一起缩放。