2017-01-02 179 views
1

有没有办法将x轴的刻度线和刻度线标签锚定在与实际x轴穿过的位置不同的位置y轴?这基本上可以与完成:Matplotlib刻度线和刻度线标签位置与轴线分开固定

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轴蜱和-0.25 -0.5刻度标记有时会在-1.0,有时候,有时候,等我总是知道什么y轴的最小值,因此希望它是锚点用于x轴刻度和刻度标签。 (事实上​​,如果可以单独处理刻度和刻度标签,我很乐意仅使用x轴刻度标签来完成此操作)。上图中显示了一个例子(我用pad=500完成)。

我环顾了其他线程,并在文档中,但我想念它或不知道正确的术语来找到它。

+0

此外,我发现包括在一个子图中的波形需要填充改变。因此,在这种方法中,能够脱离“pad”并将其锚定在y轴上的值是优选的。 – whatisit

回答

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')