4

したがって、次のような2D配列(Dataという名前)があります。

            Shape 0       Shape 1     ...      Shape N
            -------       -------              -------

Scale 0  |  Value00   ,   Value01     ...      Value0N |

Scale 1  |  Value10   ,   Value11     ...      Value1N |

  .
  .
  .

Scale N  |  ValueN0   ,   ValueN1     ...      ValueNN |

そして、ValueXXがZ軸である3Dプロットを作成したいと思います。私は2回試しましたが、それぞれがもう一方に対して回転するサーフェスを提供するため、少し混乱しました。これが私の最初の解決策です:

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)

これが私の2回目の試みです。

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)

XとYを調べても、正方形であるため、実際には役に立ちません。Xが「スケール」を表すのか、「形状」を表すのかわかりません。

では、これら2つの例で実際に何が起こっているのでしょうか。この配列をプロットするためのより良い方法はありますか?

ありがとう!

4

1 に答える 1

1

私があなたを正しく理解しているなら、混乱はどの軸がどちらであるかということですよね?この場合、既知の非対称形状を簡単にプロットでき、プロットによってすべてがわかります。たとえば、ギャラリーからの例を採用します。

# 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()
于 2012-11-04T23:11:24.297 に答える