我想使用定義的函數將輸入數據轉換爲matplotlib可以使用的網格數組。有關更大數據的示例,請查看我的griddata.zip文件。 這些數組看起來像例如:x = [0,1.0,2.0], y = [0.0,10.0,20.0], z = [0.0, 20.0, 50.0]
這意味着它們具有相同的長度,z應該繪製在x-y網格上。:基本上,之前有一些努力來回答這個問題。可能的解決方案是由M4rtini給出:Python將大數據數組轉換爲matplotlib的網格
from numpy import linspace, meshgrid
import numpy as np
from pprint import pprint
from scipy.interpolate import griddata
def grid(x, y, z, resX=100, resY=100):
"Convert 3 column data to matplotlib grid"
grid_x, grid_y = np.mgrid[min(x): max(x):1j * resX, min(y): max(y):1j * resY]
Z = griddata(np.array(zip(x, y)), np.array(z), (grid_x, grid_y), method='nearest')
return grid_x, grid_y, Z
x =[0,1.0,2.0]
y = [0.0,10.0,20.0]
z = [0.0, 20.0, 50.0]
X,Y,Z = grid(x,y,z)
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(X,Y,Z)
plt.show()
情節輸出應該是這樣的大的數據文件:Image of Plot output
我認爲這是不好的做法,命名變量和功能相同。也許你可以試試'print grid(x,y,z)',然後擔心輸出的格式。此外,我認爲你需要添加'從scipy.interpolate import griddata' – philshem
謝謝,我更新了我的描述,但返回值是None。 – beneminzl
你可以分享整個代碼,而不是分成兩部分。 – philshem