2014-01-16 18 views
4

我試圖從元組的列表繪製三維表面元組的列表繪製三維表面的數據是這樣的:從matplotlib

[(60, 5, '121'), (61, 5, '103'), (62, 5, '14.8'), (63, 5, '48.5'), (64, 5, '57.5'), (65, 5, '75.7'), (66, 5, '89.6'), (67, 5, '55.3'), (68, 5, '63.3'), (69, 5, '118'), (70, 5, '128'), (71, 5, '105'), (72, 5, '115'), (73, 5, '104'), (74, 5, '134'), (75, 5, '123'), (76, 5, '66.3'), (77, 5, '132'), (78, 5, '145'), (79, 5, '115'), (80, 5, '38.2'), (81, 5, '10.4'), (82, 5, '18.4'), (83, 5, '87'), (84, 5, '86.7'), (85, 5, '78.9'), (86, 5, '89.9'), (87, 5, '108'), (88, 5, '57.1'), (89, 5, '51.1'), (90, 5, '69.1'), (91, 5, '59.8'), (60, 6, '48.9'), (61, 6, '33.3'), (62, 6, '-19.2'), (63, 6, '-17.5'), (64, 6, '-6.5'), (65, 6, '75.7'), (66, 6, '89.6'), (67, 6, '55.3'), (68, 6, '99.8'), (69, 6, '156'), (70, 6, '141'), (71, 6, '54.1'), (72, 6, '66.1'), (73, 6, '98.9'), (74, 6, '155'), (75, 6, '146'), (76, 6, '111'), (77, 6, '132'), (78, 6, '145'), (79, 6, '97.3'), (80, 6, '101'), (81, 6, '59.4'), (82, 6, '70.4'), (83, 6, '142'), (84, 6, '145'), (85, 6, '140'), (86, 6, '56.9'), (87, 6, '77.8'), (88, 6, '21.1'), (89, 6, '27.1'), (90, 6, '48.1'), (91, 6, '41.8')]

數據的格式是這樣的:(X, Y,Z)

理想我想它是這個樣子:

enter image description here

我不確定如何養活我的數據matplotlib。

在此先感謝

+0

你可能想看看http://stackoverflow.com/questions/12423601/python-the-simplest-way-to-plot-3d-surface或http://stackoverflow.com/問題/ 3012783/plotting-3-tuple-data-points-in-a-surface-contour-plot-using-matplotlib?rq = 1 –

+0

我在此處發佈了另一個示例:http://stackoverflow.com/a/30539444/ 3585557。另外,看看這些相關/類似/重複的帖子:http://stackoverflow.com/q/9170838/3585557,http://stackoverflow.com/q/12423601/3585557,http://stackoverflow.com/ q/26074542/3585557,http://stackoverflow.com/q/283​​89606/3585557,http://stackoverflow.com/q/29547687/3585557 –

回答

6

這是一種方法。

from mpl_toolkits.mplot3d import Axes3D 
from scipy.interpolate import griddata 
import matplotlib.pyplot as plt 
import numpy as np 

data = [(60, 5, '121'), (61, 5, '103'), (62, 5, '14.8'), (63, 5, '48.5'), (64, 5, '57.5'), (65, 5, '75.7'), (66, 5, '89.6'), (67, 5, '55.3'), (68, 5, '63.3'), (69, 5, '118'), (70, 5, '128'), (71, 5, '105'), (72, 5, '115'), (73, 5, '104'), (74, 5, '134'), (75, 5, '123'), (76, 5, '66.3'), (77, 5, '132'), (78, 5, '145'), (79, 5, '115'), (80, 5, '38.2'), (81, 5, '10.4'), (82, 5, '18.4'), (83, 5, '87'), (84, 5, '86.7'), (85, 5, '78.9'), (86, 5, '89.9'), (87, 5, '108'), (88, 5, '57.1'), (89, 5, '51.1'), (90, 5, '69.1'), (91, 5, '59.8'), (60, 6, '48.9'), (61, 6, '33.3'), (62, 6, '-19.2'), (63, 6, '-17.5'), (64, 6, '-6.5'), (65, 6, '75.7'), (66, 6, '89.6'), (67, 6, '55.3'), (68, 6, '99.8'), (69, 6, '156'), (70, 6, '141'), (71, 6, '54.1'), (72, 6, '66.1'), (73, 6, '98.9'), (74, 6, '155'), (75, 6, '146'), (76, 6, '111'), (77, 6, '132'), (78, 6, '145'), (79, 6, '97.3'), (80, 6, '101'), (81, 6, '59.4'), (82, 6, '70.4'), (83, 6, '142'), (84, 6, '145'), (85, 6, '140'), (86, 6, '56.9'), (87, 6, '77.8'), (88, 6, '21.1'), (89, 6, '27.1'), (90, 6, '48.1'), (91, 6, '41.8')] 
x, y, z = zip(*data) 
z = map(float, z) 
grid_x, grid_y = np.mgrid[min(x):max(x):100j, min(y):max(y):100j] 
grid_z = griddata((x, y), z, (grid_x, grid_y), method='cubic') 

fig = plt.figure() 
ax = fig.gca(projection='3d') 
ax.plot_surface(grid_x, grid_y, grid_z, cmap=plt.cm.Spectral) 
plt.show() 
+0

上面的代碼(Python 3.3)失敗,出現以下回溯: – aag

+0

文件「 C:\ Python33 \ PyPostgres \ test.py「,第10行,在 grid_z = griddata((x,y),z,(grid_x,grid_y),method ='cubic') – aag

+0

文件」C:\ Python33 \文件「interpnd.pyx」,第840行,位於scipy.interpolate.interpnd.CloughTocher2DInterpolator .__ init__(scipy \ interpolate)中,文件「interpnd.pyx」,行840,位於griddata中的第210行。 \ interpnd.c:9507) 文件「interpnd.pyx」,第78行,在scipy.interpol ate.interpnd.NDInterpolatorBase .__ init__(scipy \ interpolate \ interpnd.c:2372) scipy.interpolate.interpnd.NDInterpolatorBase._check_init_shape(scipy \ interpolate \ interpnd.c:3039)中的文件「interpnd.pyx」,行120, IndexError:元組索引超出範圍 – aag