Plotting a 2D Array with Matplotlib

匿名 (未验证) 提交于 2019-12-03 08:48:34

问题:

So I have a 2D array (named Data) that looks like:

            Shape 0       Shape 1     ...      Shape N             -------       -------              -------  Scale 0  |  Value00   ,   Value01     ...      Value0N |  Scale 1  |  Value10   ,   Value11     ...      Value1N |    .   .   .  Scale N  |  ValueN0   ,   ValueN1     ...      ValueNN | 

And I want to create a 3D plot where the ValueXXs are the Z axis. I've tried two attempts, but each give me a surface that is rotated with respect to the other one, so I've gotten myself a bit confused. Here is my 1st attempt at a solution:

x,y = numpy.mgrid[0:50:50j,0:50:50j] f = Data fig = plt.figure() ax = Axes3D(fig) ax.plot_surface(x,y,f,rstride=1,cstride=1) 

Here is my second attempt:

nx, ny = 50, 50 x = range(nx) y = range(ny) hf = plt.figure() ha = hf.add_subplot(111, projection='3d') X, Y = numpy.meshgrid(x, y)   ha.plot_surface(X,Y,Data,rstride=1,cstride=1) 

Examining X and Y does no help really because its a square. I'm not sure when X represents my 'Scale' vs when it is representing my 'Shape'.

So, what is really going on with these two examples? Is there a better way to plot this array?

Thanks!

回答1:

If I understand you right, the confusion is which axis is which, right? If this is the case, you can easily plot a known asymmetric shape and the plot will tell you everything. For example, adopting an example from the gallery:

# By Armin Moser  from mpl_toolkits.mplot3d import Axes3D import matplotlib import numpy as np from matplotlib import cm from matplotlib import pyplot as plt step = 0.04 maxval = 1.0 fig = plt.figure() ax = fig.add_subplot(111, projection='3d')  # create supporting points in polar coordinates r = np.linspace(0,1.25,50) p = np.linspace(0,2*np.pi,50) R,P = np.meshgrid(r,p) # transform them to cartesian system X,Y = R*np.cos(P),R*np.sin(P)  #Z = ((R**2 - 1)**2) Z = (X**2 + 0.2*Y**2 -1)**2   # <------- edit  ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet) #ax.set_zlim3d(0, 1) ax.set_xlabel(r'$\phi_\mathrm{real}$') ax.set_ylabel(r'$\phi_\mathrm{im}$') ax.set_zlabel(r'$V(\phi)$') plt.show() 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!