Python:来自3个列表的2d等高线图:x,y和rho? [英] Python : 2d contour plot from 3 lists : x, y and rho?
问题描述
我在python和matplotlib中有一个简单的问题. 我有3个列表:x,y和rho,其中rho [i]在点x [i],y [i]处具有密度. x和y的所有值都在-1之间.和1.,但它们没有特定的顺序.
I have a simple problem in python and matplotlib. I have 3 lists : x, y and rho with rho[i] a density at the point x[i], y[i]. All values of x and y are between -1. and 1. but they are not in a specific order.
如何绘制密度rho(在点x,y处插值)的等高线图(如imshow).
How to make a contour plot (like with imshow) of the density rho (interpolated at the points x, y).
非常感谢您.
我使用大型数组:x,y和rho具有10,000至1,000,000个元素
EDIT : I work with large arrays : x, y and rho have between 10,000 and 1,000,000 elements
推荐答案
您需要对rho
值进行插值.没有办法做到这一点,最佳"方法完全取决于您应在插值中合并的先验信息.
You need to interpolate your rho
values. There's no one way to do this, and the "best" method depends entirely on the a-priori information you should be incorporating into the interpolation.
在我开始讨论黑盒"内插方法之前,径向基函数(例如,薄板样条"是径向基函数的一种特殊类型)通常是一个不错的选择.如果您有数百万个点,则此实现的效率会很低,但是作为一个起点:
Before I go into a rant on "black-box" interpolation methods, though, a radial basis function (e.g. a "thin-plate-spline" is a particular type of radial basis function) is often a good choice. If you have millions of points, this implementation will be inefficient, but as a starting point:
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:来自3个列表的2d等高线图:x,y和rho?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!