当前版本的 matplotlib 不再允许,我应该如何做与答案box-forced
相同的事情?
我正在使用 matplotlib 3.1.0。在我用函数在同一个图上绘制另一组数据后twinx()
,我想将实际绘图区域的纵横比更改为 1。
通常我这样做,它适用于非双轴
ratio = 1
xleft, xright = ax.get_xlim()
ybottom, ytop = ax.get_ylim()
ax.set_aspect(abs((xright - xleft) / (ybottom - ytop)) * ratio)
对于 twinx 轴,上面的代码不起作用,但也不会引发任何错误。
然后我在这里找到了答案
该代码基本上使用相同的方法将纵横比设置为1,只是带有box-forced
选项。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 1.6, 50) + 50.0
fig, ax = plt.subplots()
ax2 = ax.twinx()
XLIM = [50.0, 51.6]
YLIM = [0.0, 1.1, 0.0, 11.0]
ax.plot(x, np.sin(x - 50.0), 'b')
ax2.plot(x, np.cos(x - 50.0) * 10., 'r')
# set aspect to 1
ax.set(adjustable='box-forced',
xlim=XLIM, ylim=YLIM[:2],
xticks=np.arange(XLIM[0], XLIM[1], 0.2),
yticks=np.arange(YLIM[0], YLIM[1] + 0.1, 0.1)[:-1],
aspect=(XLIM[1] - XLIM[0]) / (YLIM[1] - YLIM[0]))
ax2.set(adjustable='box-forced',
ylim=YLIM[2:],
yticks=np.arange(YLIM[2], YLIM[3] + 1.0, 1.0),
aspect=(XLIM[1] - XLIM[0]) / (YLIM[3] - YLIM[2]))
ax.grid(True, which='major', linestyle='solid')
plt.show()
我的python中的这段代码不起作用,引发
ValueError: 'box-forced' is not a valid value for adjustable; supported values are 'box', 'datalim'
如果我将其更改为'box'
,它会给
RuntimeError: Adjustable 'box' is not allowed in a twinned Axes. Use 'datalim' instead.
我不确定从何时box-forced
删除。现在我们应该如何以“盒子”的方式设置纵横比?
谢谢!