如何生成这样的等高线图: contour http://www.fz-juelich.de/vislab/software/gsharp/Gsharp/userguide/interpolate/ex6.gif
如果这些点在常规网格上,这很容易,但如果它们不是,就像在我的示例中一样?是否有一个相当简单的算法来确定每个像素的颜色?
如何生成这样的等高线图: contour http://www.fz-juelich.de/vislab/software/gsharp/Gsharp/userguide/interpolate/ex6.gif
如果这些点在常规网格上,这很容易,但如果它们不是,就像在我的示例中一样?是否有一个相当简单的算法来确定每个像素的颜色?
可能有点晚了
但是在较新版本的 matplotlib 中,您可以对数据进行网格化:
http://www.scipy.org/Cookbook/Matplotlib/Gridding_irregularly_spaced_data
也许它有帮助
您可以使用许多插值算法来获取中间点。我在 GIS 中使用的一种是克里金算法,看起来您发布的数据使用了类似的东西。(您可以看出,例如,“热黄色”点不在黄色样本的中心,线性插值就是这种情况)
维基百科的双三次插值页面有一些很好的例子来说明选择不同插值的效果。
不同的数据可能需要不同的插值。
然后使用Gnuplot
如此处所述,以创建颜色轮廓。
看起来它可以处理非矩形数据,但我会测试这个假设。
一个例子:
(来源:lanl.gov)
从这里
Origin 的 XYZ 等高线图让您无需将 XYZ 数据转换为矩阵即可创建等高线图。它使用一种称为三角测量的插值形式。
三角剖分是将曲面或平面多边形划分为一组三角形,通常限制为每个三角形边完全由两个相邻三角形共享。三角剖分具有能够处理稀疏和不规则数据的额外好处。
所以听起来很困难但可行。
显示的图像不是传统的等高线图。如果该函数可以直接处理分散的数据,那么它本质上就是 matlab 使用函数 pcolor 可能产生的结果。但事实上,pcolor 只是冲浪,调用 view(0,90)。
如果您真的想查看等高线图,最简单的答案是使用在文件交换中找到的tricontour 。该工具将对分散的数据进行三角剖分,然后生成等高线图。
如果您希望在分散的数据集上生成类似 pcolor 的解决方案,那么一个简单的解决方案是使用 delaunay 对数据进行三角剖分,然后调用 trisurf. 电话可能看起来像这样模糊......
tri = delaunay(x,y);
trisurf(tri,x,y,z)
view(0,90)
诚然,该解决方案不会为您提供原始图片中漂亮的圆形彩色域。为此,还需要其他更复杂的解决方案。但是由于我不确定我上面提出的解决方案是否可以接受,所以我现在就停在这里。
查找 2D 插值。有一些简单的算法,但它们可能表现不佳(或需要很长时间来计算)。