Python:来自3个列表的2d等高线图:x,y和rho? [英] Python : 2d contour plot from 3 lists : x, y and rho?

查看:279
本文介绍了Python:来自3个列表的2d等高线图:x,y和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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆