我正在制作一个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
,而不是第一个。
右下角给出的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值?