我意识到我用matplotlib在3D中绘制的图有轻微的“错位”。下面是一个MWE:
import numpy as np
from matplotlib import pyplot as plt
figure = plt.figure(figsize=(8,10.7))
ax = plt.gca(projection='3d')
ax.plot_surface(np.array([[0, 0], [30, 30]]),
np.array([[10, 10], [10, 10]]),
np.array([[10, 20], [10, 20]]),
rstride=1, cstride=1
)
ax.plot_surface(np.array([[0, 0], [30, 30]]),
np.array([[20, 20], [20, 20]]),
np.array([[10, 20], [10, 20]]),
rstride=1, cstride=1
)
plt.show()
plt.close()
很明显,面元没有正确地居中,因为曲面似乎从10.5开始,到20.5结束,而不是10和20。如何实现后者?
编辑:我担心建议的答案有问题。x轴没有黑色实线,默认情况下是这样的:
当我取出建议的 Package 时,我得到:
不幸的是,当我取出我正在绘制的东西时,这个问题在Jupyter笔记本中是不可重现的,但是,我想知道你是否可以向我指出我必须做什么,以便在我的情况下,x轴再次有一条黑线?
1条答案
按热度按时间mrzz3bfm1#
这是由matplotlib处理3D
Axis
坐标引起的。它故意移动mins
和maxs
来创建一些人工填充:axis3d.py#L190-L194
从v3.5.1开始,没有参数可以控制此行为。
但是,我们可以使用
functools.wraps
来创建一个围绕Axis._get_coord_info
的 Package 器,该 Package 器取消mins
和maxs
的移位。为了防止此 Package 器多次取消移位(例如,当重新运行其Jupyter单元格时),track the wrapper state通过_unpadded
属性:打印前应用
unpad
Package 器: