绘图矩阵与图像和xrange的麻烦

时间:2017-02-24 10:44:04

标签: matrix gnuplot

我遇到了xrange问​​题。当我把'set autoscale xfix'图像放好但信息轴没有。当我把xrange [-1:1]我得到信息,但图像是损坏。第二个问题是翻转图像。在我的数据存储在文件的左上角是-1,在图像上是+1,为什么?

我的数据是:

-0.999770 -0.998743  0.946455  0.999678  0.999777 
-0.699447 -0.999784 -0.999565 -0.076214  0.999467 
 0.999921 -0.717181 -0.999790 -0.999734 -0.959481 
 0.999943  0.999920 -0.733798 -0.999793 -0.999786 
 0.999943  0.999943  0.999920 -0.749453 -0.999794 

我的代码是:

set terminal png transparent enhanced font "arial,10" fontscale 1.0 size 600, 400 
set output 'out.png'
set xtics 0.25
set ytics 0.25

set xrange [-1:1]
set yrange [-1:1]
set cbrange [-1:1]

plot 'data.txt' matrix with image

test image

我的图像是-1到1步0.5 如果我添加set xrange [-1:1]并设置yrange [-1:1]我得到 ugly image

$ gnuplot -V
gnuplot 5.0 patchlevel 3

1 个答案:

答案 0 :(得分:2)

问题在于您的数据文件被解释为统一matrix。在这种情况下:

gnuplot> help matrix
 Gnuplot can interpret matrix data input in two different ways.

 The first of these assumes a uniform grid of x and y coordinates and assigns
 each value in the input matrix to one element M[i,j] of this uniform grid.
 The assigned x coordinates are the integers [0:NCOLS-1].
 The assigned y coordinates are the integers [0:NROWS-1].

因此,这意味着文件第一行中的数据点将具有y - 坐标设置为0,第二行1等。但是,因为y - 轴默认指向上方,因此翻转所得到的图像。此外,这些点定义了图中基本颜色方块/框的中心。这就是"有效x / y范围"在您的情况下是[-0.5:4.5]

To" fix" y - 轴,您可以使用

set yr [] reverse

此处,[]指定轴仍处于自动调整状态。

最后,要将图像从[0,4]重新缩放到[-1,1]范围,您可以使用:

fn(x) = x/2. - 1
plot 'data.txt' matrix u (fn($1)):(fn($2)):3 w image

所以总的来说:

set terminal png transparent enhanced font "arial,10" fontscale 1.0 size 600, 400
set output 'out.png'
set xtics 0.25
set ytics 0.25

set xrange [-1:1]
set yrange [-1:1] reverse
set cbrange [-1:1]

fn(x)=x/2-1
plot 'data.txt' matrix u (fn($1)):(fn($2)):3 w image

修改

还可以调整上面的脚本来处理先验未知大小的矩阵:

set terminal png transparent enhanced font "arial,10" fontscale 1.0 size 600, 400
set output 'out.png'

set xrange [-1:1]
set yrange [-1:1] reverse
set cbrange [-1:1]

fName = 'data.txt'
stats fName nooutput

N = STATS_records - 1

set xtics 1./N
set ytics 1./N

fn(x)=(2*x/N)-1
plot fName matrix u (fn($1)):(fn($2)):3 w image

此处,stats命令首先扫描文件并将记录数存储到特殊变量STATS_records中。然后,函数fn会重新调整[0:STATS_records-1]上的范围[-1:1]。此外,x/y-抽搐会自动调整。