如何仅移动刻度标签(不移动相应的刻度线)?

Sal*_*Egg 12 matplotlib

我正在使用matplotlib生成图表,我使用set_ticksset_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()
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此输入图像描述

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

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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是在x = 0.35处有一个小问题,我不知道如何删除它.


更新2:

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

for line in ax.xaxis.get_minorticklines():
    line.set_visible(False)
Run Code Online (Sandbox Code Playgroud)

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

感谢所有的热心人士!

use*_*203 10

对于寻找原始问题答案的人:可以选择更改tick_label的对齐方式.

在matplotlib网页上的示例中对此进行了详细说明.基本上在上面的情况下,人们会使用

ax.get_xaxis().majorTicks[1].label1.set_horizontalalignment('right')
ax.get_xaxis().majorTicks[2].label1.set_horizontalalignment('left')
Run Code Online (Sandbox Code Playgroud)

将标签彼此移开


Gre*_*reg 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) 
Run Code Online (Sandbox Code Playgroud)

简单的sinc和注释