0

我正在编写一个 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 值是来自配对轴的 Y 值ax2,而不是来自第一个轴的 Y 值。

具有孪生轴的交互窗口: 在此处输入图像描述

右下角给出的 Y 值是ax2's给出的值ticker.FuncFormatter,我找不到一种方法让它显示ax1's 值,以便f0显示以 Hz 为单位的值。

我发现一种可能的解决方案是在 上画线和三角形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)以前也试过,plt.show()但这并没有改变任何事情。

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

4

0 回答 0