matplotlib 在3D图中正确设置轴限制[重复]

ymzxtsji  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(118)

此问题已在此处有答案

Removing axes margins in 3D plot(2个答案)
5年前关闭。
我在matplotlib中为我的3d绘图设置限制时遇到了一个问题;我发现,无论我如何设置x、y和z轴的限制,3dplots的绘图例程都会添加额外的缓冲区。

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

fig = plt.figure() 
ax = fig.add_subplot(111,projection='3d') 
ax.axes.set_xlim3d(left=0, right=10) 
ax.axes.set_ylim3d(bottom=0, top=10) 
ax.axes.set_zlim3d(bottom=0, top=10) 
plt.show()

这将生成以下图:

正如你所看到的,限制应该在x,y,z = {0,10},但是3D绘图总是在每个边缘添加一点缓冲区。有没有人知道一个方法来关闭这个效果?
我也用过PLT。xlims();和ax.axes.set_xlims(),但它们产生相同的效果。

kuuvgm7e

kuuvgm7e1#

我认为这是故意的(见E。例如this),如果你尝试绘制ax.axes.set_xlim3d(left=0.000001, right=9.9999999),那么你的图上没有显示0或10。

即使是让数字尽可能接近也不起作用,e。g的。

eps = 1e-16
ax.axes.set_xlim3d(left=0.-eps, right=10+eps)
ax.axes.set_ylim3d(bottom=0.-eps, top=10+eps) 
ax.axes.set_zlim3d(bottom=0.-eps, top=10+eps)

我发现的最佳解决方案是手动设置刻度,然后稍微缩放,以便隐藏重叠。

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

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

ax.set_xticks([0,2,4,6,8,10])
ax.set_yticks([0,2,4,6,8,10])
ax.set_zticks([0,2,4,6,8,10])

ax.axes.set_xlim3d(left=0.2, right=9.8) 
ax.axes.set_ylim3d(bottom=0.2, top=9.8) 
ax.axes.set_zlim3d(bottom=0.2, top=9.8) 

plt.show()

这给

这是相当黑客,但可以做得更一般(我总是结束手动设置标记为出版质量数字)。或者,最好关闭最低的轴网线或隐藏轴网。..

相关问题