8

たとえば、次のような2D曲線があるとします。

from matplotlib import pylab
t = numpy.linspace(-1, 1, 21)
z = -t**2
pylab.plot(t, z)

を生成します

http://i.imgur.com/feQzk.png

3Dプロットを実現するために革命を実行したいと思います(http://reference.wolfram.com/mathematica/ref/RevolutionPlot3D.htmlを参照)。3Dサーフェスをプロットすることは問題ではありませんが、期待する結果は得られません。

http://i.imgur.com/ljXHQ.png

3Dプロットでこの青い曲線の回転を実行するにはどうすればよいですか?

4

1 に答える 1

4

フィギュアのプロットはデカルトグリッドを使用しているようです。z = f(R)のような3D円筒関数のmatplotlib Webサイトにいくつかの例があります(ここ:http://matplotlib.org/examples/mplot3d/surface3d_radial_demo.html)。それはあなたが探しているものですか?以下は私があなたの関数Z=-R **2で得たものです:Z = -R**2関数のプロット

また、関数にカットオフを追加するには、次の例を使用します:(matplotlib 1.2.0が必要)

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)

Z = -(abs(X) + abs(Y))

## 1) Initial surface
# Flatten mesh arrays, necessary for plot_trisurf function
X = X.flatten()
Y = Y.flatten()
Z = Z.flatten()

# Plot initial 3D surface with triangles (more flexible than quad)
#surfi = ax.plot_trisurf(X, Y, Z, cmap=cm.jet, linewidth=0.2)

## 2) Cut off
# Get desired values indexes
cut_idx = np.where(Z > -5)

# Apply the "cut off"
Xc = X[cut_idx]
Yc = Y[cut_idx]
Zc = Z[cut_idx]

# Plot the new surface (it would be impossible with quad grid)
surfc = ax.plot_trisurf(Xc, Yc, Zc, cmap=cm.jet, linewidth=0.2)

# You can force limit if you want to compare both graphs...
ax.set_xlim(-5,5)
ax.set_ylim(-5,5)
ax.set_zlim(-10,0)

plt.show()

サーフィの結果:

サーフィ

およびsurfc:

surfc

于 2012-11-21T13:51:25.280 に答える