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

如何制作密度rho(在点x,y处插值)的等高线图(与imshow一样)。

非常感谢你。

编辑:我使用大型数组:x,y和rho具有10,000和1,000,000之间的元素

最佳答案

您需要插值rho值。没有一种方法可以做到这一点,“最佳”方法完全取决于您应在插值中合并的先验信息。

不过,在我开始讨论“黑盒”插值方法之前,径向基函数(例如,“薄板样条”是径向基函数的一种特殊类型)通常是一个不错的选择。如果您有数百万个点,则此实现将效率低下,但请以以下为起点:

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()

关于python - Python : 2d contour plot from 3 lists : x, y和rho吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9008370/

10-11 15:02