2012-05-25 108 views
1

我想在Gnuplot中绘制矩阵,因为我会在Matplotlib中使用imshow。这意味着我只想绘制实际的矩阵值,而不是值之间的插值。我已经能够做到这一点,试图用gnuplot绘制矩阵

splot "file.dat" u 1:2:3 ps 5 pt 5 palette 

这种方式,我们都在讲程序使用5号和空间的列在文件中1,2和3,使用方格点很窄的缝隙。然而,我的数据集中的点不是均匀分布的,因此我得到了不连续性。

任何人都可以在gnuplot中绘制矩阵值的方法,而不管xa和y轴上的间距是否均匀?

+0

是你的问题,你不能让gnuplot绘制矩阵不均匀的间距,或点之间的不均匀间距产生的差距? – andyras

+0

我的问题是空白显示在情节。所以我需要一个过程来绘制没有间隙或插值的矩阵。 – ricoamor

回答

0

请参阅输入数据here的说明。您可能必须相应地更改数据文件的格式。

+0

谢谢,但这不是一个关于如何格式化数据的问题。这是关于绘制使用(M-1)x(N-1)帧的MxN矩阵或仅绘制完整矩阵的区别。这就是matplotlib中的imshow所能做到的。 – ricoamor

1

Gnuplot不需要X轴和Y轴空间均匀。 (请参阅我的回答中的另一个:https://stackoverflow.com/a/10690041/748858)。我经常处理看起来像x[i] = f_x(i)y[j] = f_y(j)的网格。这是很琐碎的绘制,数据文件只是看起来像:

#datafile.dat 
x1 y1 z11 
x1 y2 z12 
... 
x1 yN z1N 
      #<--- blank line (leave these comments out of your datafile ;) 
x2 y1 z21 
x2 y2 z22 
... 
x2 yN z2N 
      #<--- blank line 
... 
... 
      #<--- blank line 
xN y1 zN1 
... 
xN yN zNN 

(注意空行)

这样一个数据文件可以被绘制成:

set view map 
splot "datafile.dat" u 1:2:3 w pm3d 

选项set pm3d corners2color能用于微调您要为创建的矩形着色哪个角。

另外请注意,你可以做本质上是相同的情节这样做:

set view map 
plot "datafile.dat" u 1:2:3 w image 

虽然我不使用这一个自己,所以它可能会失败,非等距矩形网格(你会需要尝试它)。

回应您的评论

是,pm3d不会产生(M-1)×(N-1)如你提到在您的评论四边形 - 它需要4个角落,并(通过默认值)平均值来分配一种颜色。你似乎不喜欢这样 - 尽管(在大多数情况下)我怀疑你能够在合理的大M和N(大于20)的情节中分辨出不同。因此,在我们继续之前,您可能会问自己是否真的有必要绘制每点

这就是说,用一点工作,gnuplot仍然可以做你想要的东西。解决方案是指定要使用特定的角将颜色分配给整个四边形。

#specify that the first corner should be used for coloring the quadrilateral 
set pm3d corners2color c1 #could also be c2,c3, or c4. 

然后,只需添加您的矩阵的最后一排和最后一列绘制两次(做了一个额外的格点,以容纳更大的数据集。你还没有应用,你还需要改变你的网格值的一半的单元格,以便您的四边形以问题点为中心 - 您如何移动单元格取决于您选择的角落(c1,c2,c3,c4) - 您需要随时随地找出你想要哪一个。

请注意,这里的问题不是gnuplot。这就是说,在给定MxN三元组的情况下,数据文件中没有足够的信息来构造MxN曲面。在每一个点上,你都需要知道它的位置(x,y),它的值(z)以及要绘制的四边形的大小 - 这是比你打包到文件中更多的信息。当然,你可以猜测内部点的大小(只是半路),但外部点没有猜测。 但为什么不只是使用下一个内部点的大小?。这是一个很好的问题,对于矩形网格来说,它(通常)会很好地工作,但这只是一个特例(尽管是常见的) - 对许多其他网格来说,这可能(很可能)失败。重点在于gnuplot认为平均角度通常“足够接近”,但是可以让你选择改变它。

+0

谢谢,但这不能解决插值问题。我已经以正确的格式存储了我的数据。问题是,用你描述的一个MxN矩阵的程序,我们会用(M-1)x(N-1)帧恢复一个绘图,颜色对应于矩阵值之间的插值。这不是我想要的。我只想用一个等效的程序来绘制MxN点。 – ricoamor

+0

@ricoamor - 绘制图像(后者)绘制MxN点。 – mgilson

+0

@ricoamor - 我已经使用pm3d解决方案进行了编辑,我确信它会起作用......但它需要您付出更多努力。我试图解释为什么会出现这种情况 - 希望这很清楚。 – mgilson