大多数 pyplot 示例都使用线性数据,但如果数据分散怎么办?
x = 3,7,9<br/>
y = 1,4,5<br/>
z = 20,3,7
更好的轮廓网格
xi = np.linspace(min(x)-1, max(x)+1, 9)<br/>
yi = np.linspace(min(y)-1, max(y)+1, 9)<br/>
X, Y = np.meshgrid(xi, yi)
现在“z”数据必须插值到网格上。
numpy.interp
在这里没有什么帮助,而线性和nn插值
zi = matplotlib.mlab.griddata(x,y,z,xi,yi,interp="linear")
返回相当奇怪的结果
scipy.interpolate.griddata
下面第二个答案中的立方需要其他东西来返回数据而不是nils
使用自定义级别数据预计会看起来像 like this
最佳答案
事情是这样的:
尽管轮廓
需要网格数据,但我们可以将散点数据转换到网格中,然后使用屏蔽数组
屏蔽空白区域。我在下面的代码中模拟了这一点,方法是创建一个随机数组,然后使用它来屏蔽测试数据集(如底部所示)。大部分代码取自 this matplotlib demo page .
import matplotlib
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
matplotlib.rcParams['xtick.direction'] = 'out'
matplotlib.rcParams['ytick.direction'] = 'out'
delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
# difference of Gaussians
Z = 10.0 * (Z2 - Z1)
from numpy.random import *
import numpy.ma as ma
J = random_sample(X.shape)
mask = J > 0.7
X = ma.masked_array(X, mask=mask)
Y = ma.masked_array(Y, mask=mask)
Z = ma.masked_array(Z, mask=mask)
plt.figure()
CS = plt.contour(X, Y, Z, 20)
plt.clabel(CS, inline=1, fontsize=10)
plt.title('Simplest default with labels')
plt.savefig('cat.png')
plt.show()
关于python - 通过 python 的 matplotlib.pyplot.contourf 分散 x,y,z,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10723413/