麻烦对齐matplotlib twinx轴的滴答声

ama*_*ays 7 python matplotlib

我创建了一个有2个y轴的matplotlib图.y轴有不同的比例,但我希望对齐和网格对齐.我从excel文件中提取数据,因此无法预先知道最大限制.我试过以下代码.

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

locs = ax1.yaxis.get_ticklocs()
ax2.set_yticks(locs) 
Run Code Online (Sandbox Code Playgroud)

现在的问题是ax2上的刻度不再有标签了.谁能给我一个很好的方法来对齐不同尺度的蜱?

Imp*_*est 14

对齐两个不同比例的刻度位置意味着放弃好的自动刻度定位器并将刻度设置为次轴上与原始刻度相同的位置.

我们的想法是使用函数建立两个轴刻度之间的关系,并将第二个轴的刻度设置在第一个轴的位置.

在此输入图像描述

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()
Run Code Online (Sandbox Code Playgroud)

请注意,这是针对一般情况的解决方案,并且可能导致完全不可读的标签,这取决于用例.如果您碰巧有关于轴范围的更多先验信息,则可能有更好的解决方案.

另请参阅此问题,以便牺牲第一轴的自动刻度位置,以便更轻松地设置次轴刻度位置.