如何告诉交互窗口哪个y值用双轴显示?

时间:2018-04-14 14:55:30

标签: python matplotlib matplotlib-widget

我正在制作一个Python脚本来显示音乐音调分析的结果。我已经将第一个轴配对并提供了一个自定义的自动收报机,因此我可以在Hz和Pitch中查看结果。基于https://matplotlib.org/2.1.0/gallery/api/two_scales.html示例的相关代码是:

fig, ax1 = plt.subplots(1,1)
ax1.set_xlabel('time')
ax1.set_ylabel('f0/Hz')

# read and process data, draw green rectangle on ax1... then

ax1.plot(t, f0)

# Make a second y axis with note names on it.
ax2 = ax1.twinx()
ax2.set_ylabel('Pitch')
ax2.set_ylim(ax1.get_ylim())
ax2.yaxis.set_major_locator(PitchTicker(19,numticks=30))
ax2.yaxis.set_major_formatter(ticker.FuncFormatter(lambda f, pos: 
hz_to_tuning19(f)[0]))

# All other code refers to ax1, then...

plt.title('[{}:{}] {}'.format(first,last,title))
fig.tight_layout()
plt.show()

除了在一个方面,这是所希望的,不幸的是,这是最终用户的主要问题。当显示窗口并且指针在轴上移动时,显示的Y值来自孪晶轴ax2,而不是第一个。

孪生轴的交互窗口: enter image description here

右下角给出的Y值是ax2的{​​{1}}给出的值,我无法找到显示ticker.FuncFormatter的方法相反,以便显示以Hz为单位的ax1值。

我发现一种可能的解决方案是在f0上绘制直线和三角形,然后创建ax1并说

ax2

但这看起来很反直觉,感觉将来可能会破裂。

我在ax1.yaxis.tick_right() ax2.yaxis.tick_left() ax1.yaxis.set_label_position('right') ax2.yaxis.set_label_position('left') 之前尝试过调用plt.sca(ax1)甚至是ax2.set_axisbelow(True),但这并没有改变任何内容。

是否有官方方式告诉交互窗口报告鼠标位置时显示哪些X和Y值?

0 个答案:

没有答案