matplotlib 无法对齐twinx轴的记号

vd8tlhqk  于 2023-06-06  发布在  其他
关注(0)|答案(2)|浏览(141)

我创建了一个有两个y轴的matplotlib图。y轴具有不同的比例,但我希望刻度和网格对齐。我正在从Excel文件中提取数据,所以没有办法事先知道最大限制。

# creates double-y axis
ax2 = ax1.twinx()

locs = ax1.yaxis.get_ticklocs()
ax2.set_yticks(locs)

现在的问题是ax2上的记号不再有标签。谁能给予我一个好的方法来对齐不同尺度的蜱?

t5fffqht

t5fffqht1#

对齐两个不同刻度的刻度位置意味着给予漂亮的自动刻度定位器,并将刻度设置为与原始轴相同的辅助轴位置。
其思想是使用函数建立两个轴比例之间的关系,并将第二个轴的刻度设置在第一个轴的刻度位置。

import matplotlib.pyplot as plt
import matplotlib.ticker

fig, ax = plt.subplots()
# creates double-y axis
ax2 = ax.twinx()

ax.plot(range(5), [1,2,3,4,5])
ax2.plot(range(6), [13,17,14,13,16,12])
ax.grid()

l = ax.get_ylim()
l2 = ax2.get_ylim()
f = lambda x : l2[0]+(x-l[0])/(l[1]-l[0])*(l2[1]-l2[0])
ticks = f(ax.get_yticks())
ax2.yaxis.set_major_locator(matplotlib.ticker.FixedLocator(ticks))

plt.show()

请注意,这是一个一般情况下的解决方案,它可能会导致完全不可读的标签依赖于用例。如果您碰巧有更多关于轴范围的先验信息,可能会有更好的解决方案。
另请参见this question,了解第一个轴的自动刻度位置被牺牲以更容易地设置第二个轴刻度位置的情况。

rslzwgfq

rslzwgfq2#

对于任何想知道的人(以及我未来的参考),ImportanceofBeingErnest的答案中的lambda函数f将输入的左刻度Map到相应的右刻度:

  • RHS刻度=底部RHS刻度+(经过的LHS范围的%* RHS范围)*

参考this question on tick formatting来截断小数位:

from matplotlib.ticker import FormatStrFormatter

ax2.yaxis.set_major_formatter(FormatStrFormatter('%.2f')) # ax2 is the RHS y-axis

相关问题