【问题标题】:Matplotlib ticks and tick labels position anchored separately from axisMatplotlib 刻度和刻度标签位置分别与轴锚定
【发布时间】:2017-01-02 01:40:29
【问题描述】:

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

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

ax.xaxis.set_tick_params(pad=500)

例如:

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

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

作为奖励,将其翻转以使 y 轴锚定在与 y 轴刻度标签不同的位置肯定也会使某人受益。

在我的特定情况下,我的 x 轴在 y=0 处与 y 轴相交。 x轴刻度和刻度标签有时会在-1.0,有时在-0.5,有时在-0.25等。我总是知道y轴的最小值是多少,因此希望它成为锚点用于 x 轴刻度和刻度标签。 (事实上​​,我很乐意只使用 x 轴刻度标签,如果可以分别处理刻度和刻度标签)。上图中显示了一个示例(我使用pad=500 完成)。

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

【问题讨论】:

  • 另外,我发现在子图中包含波形需要更改填充。因此,能够摆脱pad 并将其锚定到 y 轴上的值也是此方法的首选。

标签: python matplotlib


【解决方案1】:

更新:由于顶部 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')

【讨论】:

  • 这是一个很好的解决方案,但它似乎有点“黑客”,ax.xaxis.set_label_position('bottom') 应该正常工作,但它没有...
【解决方案2】:
猜你喜欢
  • 2019-05-21
  • 2019-08-25
  • 2012-03-14
  • 1970-01-01
  • 2021-06-14
  • 2021-10-29
  • 2012-12-19
  • 2016-10-09
  • 1970-01-01
相关资源
最近更新 更多