2017-07-24 66 views
1
做一个蟒蛇情节

我有安排这样的东西数据:再次出现阵列

x = [0,1,2,0,1,2,0,1,2] 
y = [0,0,0,1,1,1,2,2,2] 
z = [2,4,3,3,5,1,1,2,1] 

我将如何绘制这件事让我有一个3x3 imshow或等值线图?

+0

你的意思是这样的:https://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#mpl_toolkits.mplot3d.Axes3D.scatter? – nikpod

+0

z是x和y的函数吗? 'countourf'需要。 –

回答

1

您可以使用contourf了点。它要求您的数据跟随网格。您可以通过创建一个二维网格:

x, y = np.meshgrid(x, y) 

然后运行功能z所有(x, y)对和情节。

import matplotlib.pyplot as plt 
... 
plt.contourf(x , y, z) 
plt.show() 

或者你可以有一个像3D plot

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
... 
ax.plot_surface(x, y, z, color='b') 
plt.show() 

如果您没有访问产生z功能。你必须interpolate

from scipy.interpolate import griddata 
# points is the original pair (x, y) 
grid_z0 = griddata(points, z, (grid_x, grid_y), method='nearest') 
+0

嗯,当我尝试,countourf说是Z必须是2D,并且在3D图的作品,剧情是空的(虽然轴是正确的) – jhodgo

+0

@jhodgo我的坏看到更新。你需要创建一个meshgrid。没有它,你只能做散点图。 – Y0da

+0

太好了 - 谢谢!完美的作品 – jhodgo

1

如果z事实上是xy的功能,你想一个countourf密谋,您可以重塑与numpy的你的阵列,然后绘制它:

import matplotlib.pyplot as plt 
import numpy as np 
x = np.array([0,1,2,0,1,2,0,1,2]) 
y = np.array([0,0,0,1,1,1,2,2,2]) 
z = np.array([2,4,3,3,5,1,1,2,1]) 
cols = np.unique(x).shape[0] 
X = x.reshape(-1, cols) 
Y = y.reshape(-1, cols) 
Z = z.reshape(-1, cols) 
plt.contourf(X,Y,Z) 
plt.show() 

+0

完美!非常感谢你! – jhodgo

+0

我很高兴帮助!这里在StackOverflow中,如果答案有帮助,[接受](https://meta.stackexchange.com/a/5235)建议,谢谢! –