2017-03-19 24 views
0

定数(0)の3Dプロットを作成しようとしています。だから私はmatplotlibを使って3Dプロットを作成する

width = 1 
dx = 0.1 
X = np.arange(-width, width, dx) 
Y = np.arange(-width, width, dx) 
X, Y = np.meshgrid(X, Y) 
Z = [] 
for i in range(len(X)): 
    Z.append(np.zeros(len(X[i]))) 

を持っている。しかし、私はAxes3D.plot_wireframe(X,Y,Z)を実行しようとすると、私はplot_wireframe() missing 1 required positional argument: 'Z'を取得します。 Zは2D配列であり、matplotlibで3Dプロットをすると多くの参考になる例が見つからないので、なぜこれが理解できるのか理解する助けが必要です。

答えて

1

主な点は、Axes3D.plot_wireframe(X,Y,Z)を単独で実行できないことです。代わりにAxes3Dのインスタンスを作成し、そのメソッド[*]を呼び出す必要があります。 matplotlib.axes.Axes.plot(x,y)ではなく、ax.plot(x,y)と呼び出す2Dの場合と同じです。axはインスタンスです。 fig.add_subplot経由

ワイヤフレームプロットの例は、hereです。

(質問からのコードを使用して)次のコード

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

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 

width = 1 
dx = 0.1 
X = np.arange(-width, width, dx) 
Y = np.arange(-width, width, dx) 
X, Y = np.meshgrid(X, Y) 
Z = [] 
for i in range(len(X)): 
    Z.append(np.zeros(len(X[i]))) 

ax.plot_wireframe(X, Y, Z) 

plt.show() 

は、[*]ここで正確にするために、次のプロット

enter image description here


をproduses。あなたは、クラスメソッド plot_wireframeを呼び出すことができますが、その後、私はオンライン this例を見つけ

Axes3D.plot_wireframe(ax, X, Y, Z) 
+0

は申し訳ありませんが、私はJupyterを使用していた言及を忘れてしまいました。ですから、通常はプロットを作成するときには、通常、図やサブプロットなどを作成する必要はありません。だから私は私が持っていた線を3Dプロットを作成すると仮定したと思います。 –

+0

コードに入力する場所に関係なく、常に図とサブプロットを作成します。 – ImportanceOfBeingErnest

+0

なぜですか?ジュピターはあなたにできない、ない? –

1

のようなインスタンスでそれを供給する必要があります。 私はあなたのコード例でそれを貼り付けていると私は、次のコード+プロットを得た:

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

width = 1 
dx = 0.1 
X = np.arange(-width, width, dx) 
Y = np.arange(-width, width, dx) 
X, Y = np.meshgrid(X, Y) 
Z = [] 
for i in range(len(X)): 
    Z.append(np.zeros(len(X[i]))) 

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 

ax.plot_wireframe(X, Y, Z) 

plt.show() 

enter image description here

ホープ、このことができます!私はスパイダーIDEを使って、python 3.5でそれを走らせました。

乾杯、 デイブ

関連する問題