Python:3个列表中的2D轮廓图:x,y和rho?

我在python和matplotlib中有一个简单的问题。 我有3个列表:x,y和rho,其中rho [i]是点x [i],y [i]的密度。 x和y的所有值都在-1之间。 和1,但他们不是在一个特定的顺序。

如何制作密度ρ(插入点x,y)的等值线图(如imshow)。

非常感谢你。

编辑:我使用大型数组:x,y和rho有10,000到1,000,000个元素

你需要插入你的rho值。 没有办法做到这一点,“最好”的方法完全取决于你应该纳入插值的先验信息。

在我讨论“黑盒子”插值方法之前,径向基函数(例如“薄板样条”是特定types的径向基函数)通常是一个不错的select。 如果你有几百万分,这个实现将是低效的,但作为一个起点:

 import numpy as np import matplotlib.pyplot as plt import scipy.interpolate # Generate data: x, y, z = 10 * np.random.random((3,10)) # Set up a regular grid of interpolation points xi, yi = np.linspace(x.min(), x.max(), 100), np.linspace(y.min(), y.max(), 100) xi, yi = np.meshgrid(xi, yi) # Interpolate rbf = scipy.interpolate.Rbf(x, y, z, function='linear') zi = rbf(xi, yi) plt.imshow(zi, vmin=z.min(), vmax=z.max(), origin='lower', extent=[x.min(), x.max(), y.min(), y.max()]) plt.scatter(x, y, c=z) plt.colorbar() plt.show() 

在这里输入图像描述

你可以使用scipy的griddata (需要Scipy> = 0.10),这是一个基于三angular剖分的方法。

 import numpy as np import matplotlib.pyplot as plt import scipy.interpolate # Generate data: for N=1e6, the triangulation hogs 1 GB of memory N = 1000000 x, y = 10 * np.random.random((2, N)) rho = np.sin(3*x) + np.cos(7*y)**3 # Set up a regular grid of interpolation points xi, yi = np.linspace(x.min(), x.max(), 300), np.linspace(y.min(), y.max(), 300) xi, yi = np.meshgrid(xi, yi) # Interpolate; there's also method='cubic' for 2-D data such as here zi = scipy.interpolate.griddata((x, y), rho, (xi, yi), method='linear') plt.imshow(zi, vmin=rho.min(), vmax=rho.max(), origin='lower', extent=[x.min(), x.max(), y.min(), y.max()]) plt.colorbar() plt.show() 

也有反向距离加权插值 – 类似于RBF,但是对于大数量的点应该更好: 用Python进行反距离加权(IDW)插值