2

そこにあるほとんどのpyplotの例は線形データを使用していますが、データが分散している場合はどうなりますか?
x = 3,7,9
y = 1,4,5
z = 20,3,7

等高線用のより良いメッシュグリッド
xi = np.linspace(min(x)-1, max(x)+1, 9)
yi = np.linspace(min(y)-1, max(y)+1, 9)
X, Y = np.meshgrid(xi, yi)

ここで、「z」データをメッシュグリッドに補間する必要があります。
numpy.interpここではほとんど役に立ちませんが、線形補間とnn補間の両方
zi = matplotlib.mlab.griddata(x,y,z,xi,yi,interp="linear") がかなり奇妙な結果を返します

scipy.interpolate.griddata 以下の2番目の回答の立方体は、nilではなくデータを返すために何か他のものを必要とします

カスタムレベルのデータを使用すると、次のようになると予想されます

4

2 に答える 2

2

これが起こることです: ここに画像の説明を入力してください

グリッドデータがcontour必要ですが、散布データをグリッドにキャストしてmasked arraysから、マスクを使用して空白の領域を除外することができます。以下のコードで、ランダム配列を作成し、これを使用してテストデータセット(下部に表示)をマスクすることにより、これをシミュレートします。コードの大部分は、このmatplotlibデモページから取得されます。

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

ここに画像の説明を入力してください

于 2012-05-23T16:12:59.117 に答える
2

countourfデータのグリッドでのみ機能します。データが散らばっている場合は、次のように、データに一致する補間グリッドを作成する必要があります: (補間を実行するには scipy が必要であることに注意してください)

import numpy as np
from scipy.interpolate import griddata
import matplotlib.pyplot as plt
import numpy.ma as ma
from numpy.random import uniform, seed

# your data
x = [3,7,9]
y = [1,4,5]
z = [20,3,7]

# define grid.
xi = np.linspace(0,10,300)
yi = np.linspace(0,6,300)
# grid the data.
zi = griddata((x, y), z, (xi[None,:], yi[:,None]), method='cubic')
# contour the gridded data, plotting dots at the randomly spaced data points.
CS = plt.contour(xi,yi,zi,15,linewidths=0.5,colors='k')
CS = plt.contourf(xi,yi,zi,15,cmap=plt.cm.jet)
plt.colorbar() # draw colorbar
# plot data points.
plt.scatter(x,y,marker='o',c='b',s=5)
plt.xlim(min(x),max(x))
plt.ylim(min(y),max(y))
plt.title('griddata test (%d points)' % len(x))
plt.show()

そのコードの起源については、こちらを参照してください。

于 2012-05-23T16:07:27.450 に答える