2D データを 3D 軸にプロットしようとしています。を使用して 3D 形状を動作させてax.plot_surface
いますが、 を使用して 2D データを軸の壁にぴったりと合わせることができませんax.plot
。
これは、2D データで発生している問題を示す簡略化されたサンプル コードです。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# Generate Example Data
x = [0.04,0,-0.04]
y = [0.04,0,-0.04]
z = [0.04,0,-0.04]
# Start plotting environment
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# Plot 3 lines positioned against the axes "walls"
ax.plot(x,y,-0.08,zdir='z',c='r')
ax.plot(x,z, 0.08,zdir='y',c='g')
ax.plot(y,z,-0.08,zdir='x',c='b')
# Label each axis
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
# Set each axis limits
ax.set_xlim([-0.08,0.08])
ax.set_ylim([-0.08,0.08])
ax.set_zlim([-0.08,0.08])
# Equally stretch all axes
ax.set_aspect("equal")
# Set plot size for saving to disk
plt.gcf().set_size_inches(11.7,8.3)
# Save figure in .eps and .png format
plt.savefig('test.eps', format='eps')
plt.savefig('test.png', format='png', dpi=300)
# Display figure
plt.show()
これにより、次の結果が得られ、データ ラインの端が軸線上にないことがわかります (つまり、0.04 と -0.04 に揃えないでください)。
プロットをインタラクティブに調査することで、ax.plot
呼び出しの 0.08 を 0.083 の大きさに変更すると (関連する符号を維持しながら)、プロットを壁により平らにフィットさせることができると判断しました。
これについての私の解釈は、プロットが軸の境界を強制していないということです。これは、軸が交わる間隔を見ることでプロットに明らかに表示されますが、ax.get_xlim()
etc を使用すると、設定した値が表示されるため、何かが欠けています。
これらのプロットを壁にぴったり合わせる方法についてのアイデアはありますか?
どうもありがとう、
ティム
編集:
また、次を使用して軸の制限を設定しようとしました
ax.set_xlim3d(-0.08,0.08)
ax.set_ylim3d(-0.08,0.08)
ax.set_zlim3d(-0.08,0.08)
と
ax.set_xlim3d([-0.08,0.08])
ax.set_ylim3d([-0.08,0.08])
ax.set_zlim3d([-0.08,0.08])
運がなければ。
私は間違いなく、これを軸が交わるパディングの問題に帰することに傾いていますが、これに関するドキュメントを見つけることができません。すなわち。プロット位置を -0.08 に設定し、軸の制限を -0.08 に設定していますが、プロットは最後に小さなパディングを追加して、制限を -0.082 と -0.083 の間のどこかに設定しています。
ax.plot
コマンドに入力できるように、パディングを削除するか、パディング値を取得したい。
編集2:
この問題に遭遇したが、問題が解決されていない他の誰か mplot3d フィギュアのグリッド壁の位置の変更