3

matplotlib を使用して、複数のワイヤフレーム球で構成されるプロットを作成しようとしています。ここでそのような球体を 1 つプロットするコード フラグメントを見つけたので、plot_wireframe を複数回呼び出すだけで複数の球体に簡単に拡張できると考えました。私は間違っていた。コードの一部を次に示します。

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
u, v = np.mgrid[0:2*np.pi:20j, 0:np.pi:10j]
x=np.cos(u)*np.sin(v)
y=np.sin(u)*np.sin(v)
z=np.cos(v)
fig = plt.figure(figsize=(8,6))
ax = fig.gca(projection='3d')
ax.plot_wireframe(x*3.+5., y*3., z*3.,linewidths=.2)
ax.view_init(azim=30,elev=40)
ax.set_aspect("equal")
plt.show()
fig = plt.figure(figsize=(8,6))
ax = fig.gca(projection='3d')
ax.plot_wireframe(x*3.+5., y*3., z*3.,linewidths=.2)
spheres = [ [0,0,0,1], [3,0,0,1.6] ]
for v in spheres:
    ax.plot_wireframe(x*v[3]+v[0], y*v[3]+v[1], z*v[3]+v[2],linewidths=.2)
ax.view_init(azim=30,elev=40)
ax.set_aspect("equal")
plt.show()

このコードを実行すると、最初のプロットではきれいな球が表示されますが、2 番目のプロットではすべての球が歪んでシフトされます。同じ軸で plot_wireframe を複数回呼び出すことができることを確認するために検索しましたが、何も見つかりませんでした。また、私は Python 初心者ですが、何か間違ったことをしているとは思いません。お手伝いありがとう!

4

1 に答える 1

1

簡単な答え: 軸の範囲を手動で調整します:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
u, v = np.mgrid[0:2*np.pi:20j, 0:np.pi:10j]
x=np.cos(u)*np.sin(v)
y=np.sin(u)*np.sin(v)
z=np.cos(v)

# I'm not sure what was this for.  
'''
fig = plt.figure(figsize=(8,6))
ax = fig.gca(projection='3d')
ax.plot_wireframe(x*3.+5., y*3., z*3.,linewidths=.2)
ax.view_init(azim=30,elev=40)
ax.set_aspect("equal")

plt.show()
'''

fig = plt.figure(figsize=(8,6))
ax = fig.gca(projection='3d')


ax.plot_wireframe(x*3.+5., y*3., z*3.,linewidths=.2)
spheres = [ [0,0,0,1], [3,0,0,1.6] ]
for v in spheres:
    ax.plot_wireframe(x*v[3]+v[0], y*v[3]+v[1], z*v[3]+v[2],linewidths=.2)
ax.view_init(azim=30,elev=40)

ax.set_xlim([0,7])   # Like so. 
ax.set_ylim([-3,3]) 
ax.set_zlim([-3,3]) 

ax.set_aspect("equal")
plt.show()
于 2012-09-06T10:51:39.320 に答える