13

我正在使用 matplotlib 生成图表,并使用set_ticksandset_ticklabels标记 x 轴上的几个重要值。但是其中一些标签太靠近并且重叠。但我不知道如何在不移动刻度的情况下移动这些标签。

这是一个插图:

重叠的刻度标签

我尝试了几个技巧但都失败了,我在互联网上没有找到这个问题的答案。任何帮助,谢谢。


更新:

源代码:

fig = mpl.figure( figsize=(3, 3) )              # force figsize here to reproduce the problem.
ax = fig.add_subplot(1, 1, 1, frameon=False)
ax.set_xlim(-0.015, 1.515)
ax.set_ylim(-0.01, 1.01)
ax.set_xticks([0, 0.3, 0.4, 1.0, 1.5])
ax.grid(True)
mpl.show()

结果:

在此处输入图像描述

我尝试了几种技巧,最好的一种是:

fig = mpl.figure( figsize=(3, 3) )
ax = fig.add_subplot(1, 1, 1, frameon=False)
ax.set_xlim(-0.015, 1.515)
ax.set_ylim(-0.01, 1.01)
ax.set_xticks([0, 0.3, 0.4, 1.0, 1.5])
ax.set_xticklabels([0.0, "", "", 1.0, 1.5])
ax.set_xticks([0.35], minor=True)
ax.set_xticklabels(["0.3 0.4"], minor=True)
ax.grid(True)
mpl.show()

在此处输入图像描述

但是在 x = 0.35 处有一个小勾号,我不知道如何删除它。


更新 2:

好的,我找到了如何自己删除小蜱虫的方法:

for line in ax.xaxis.get_minorticklines():
    line.set_visible(False)

通过这种方式,我们可以利用次要刻度将刻度标签放在我们想要的任何位置。

感谢所有的热心人!

4

3 回答 3

10

对于寻找原始问题答案的人:它可能是更改 tick_label 对齐方式的一个选项。

这在matplotlib 网页上的示例中进行了详细说明。基本上在上述情况下会使用

ax.get_xaxis().majorTicks[1].label1.set_horizontalalignment('right')
ax.get_xaxis().majorTicks[2].label1.set_horizontalalignment('left')

使标签彼此远离

于 2015-01-09T16:01:31.840 回答
8

从您的评论“..在 x 轴上标出几个重要值”,我认为您不应该更改 xticks 和标签,而是添加带有适当注释的垂直线。

这意味着您的数据保持规则的网格并允许您对重要点进行着色,您也可以相当容易地添加数值。

例子

import pylab as py

# Plot a sinc function
delta=2.0
x=py.linspace(-10,10,100)
y=py.sinc(x-delta)

# Mark delta
py.axvline(delta,ls="--",color="r")
py.annotate(r"$\delta$",xy=(delta+0.2,-0.2),color="r",size=15)
py.plot(x,y) 

简单的 sinc 和注解

于 2013-04-23T13:29:28.357 回答
4

作为对所提问题的严格回答,您可以获得特定的刻度并使用set_pad()

ax.get_xaxis().majorTicks[2].set_pad()

我认为更好的做法是使用autofmt_xdate

fig = plt.figure()
fig.autofmt_xdate()

它可以很好地旋转 xtick 标签并允许大多数文本很好地适应而不会重叠。
如果它们仍然重叠 - 这意味着这些刻度非常靠近。然后出现的问题是两个如此紧密地结合在一起的滴答声对你的情节的观众有什么好处?

于 2013-04-23T12:22:25.467 回答