我正在尝试将 2D 数据绘制到 3D 轴上。我正在使用 3D 形状,ax.plot_surface
但我无法使用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])
没有任何运气。
我绝对倾向于将此归因于轴相遇的填充问题,但我无法找到任何有关此的文档。IE。我将绘图位置设置为 -0.08 并将轴限制设置为 -0.08,但绘图在末尾添加了一些填充以使限制介于 -0.082 和 -0.083 之间。
我要么想删除填充,要么获取填充值,以便我可以将其输入到ax.plot
命令中。
编辑2:
遇到此问题但尚未解决问题的其他人 更改 mplot3d 图形中网格墙的位置