Matplotlib刻度和刻度标记位置与轴分开锚定

时间:2017-01-02 01:40:29

标签: python matplotlib

有没有办法固定x轴的刻度和刻度标签,使它们在与实际x轴穿过y轴的位置不同的位置穿过y轴?这基本上可以通过以下方式完成:

ax = plt.gca()
ax.get_xaxis().set_tick_params(pad=5)

ax.xaxis.set_tick_params(pad=500)

例如:

Waveform with x-axis anchored at y-axis 0 and tick labels anchored at y-axis -0.04223

除了我正在处理音频文件输入并且y轴是可变的(基于波形的最高/最低幅度)。因此,最大和最小y轴值根据音频文件而变化。我担心pad=NUM将相对于y轴移动。

因此,我正在寻找一种方法来完成pad所做的事情,将ticks和tick标签锚定在最小的y轴值。

作为奖励,翻转它以使y轴固定在与y轴刻度标签不同的地方,肯定会使某人受益。

在我的特定情况下,我的x轴在y = 0处与y轴交叉。 x轴刻度和刻度标签有时为-1.0,有时为-0.5,有时为-0.25等。我总是知道y轴的最小值是什么,因此希望它是锚点用于x轴刻度和刻度标签。 (事实上​​,我很高兴只使用x轴刻度标签,如果可以单独处理刻度和刻度标签)。上图(我用pad=500完成了这个图片)显示了这方面的一个例子。

我查看了其他主题和文档,但我要么错过它,要么不知道找到它的正确术语。

1 个答案:

答案 0 :(得分:0)

更新:我添加了网格线并且由于顶部x轴被移位而导致非常意外的行为(例如,线型和线宽未按预期工作)。我意识到还有一种更好的方法 - 保持轴(关闭样条曲线)并简单地在(0,0)到(max_time,0)处绘制第二行。

ax.plot([0,times[-1]], [0,0], color='k') # Creates a 'false' x-axis at y=0
ax.spines['top'].set_color('none') # Position unchanged
ax.spines['bottom'].set_color('none') # Position unchanged

<小时/> 弄清楚了!我正在考虑这个错误的方法......

问题:将底部x轴移动到中心并填充刻度标签

解决方案:将底部x轴保持原位(关闭底部脊柱)并将顶部x轴移动到中心(保持顶部脊柱,但关闭刻度并勾选标签) )。

ax.spines['top'].set_position('center')
ax.spines['bottom'].set_color('none') # Position unchanged
ax.xaxis.set_tick_params(top='off')