我正在使用matplotlib生成图表,我使用set_ticks
和set_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处有一个小问题,我不知道如何删除它。
好的,我找到了自己删除小蜱的方法:
for line in ax.xaxis.get_minorticklines():
line.set_visible(False)
通过这种方式,我们可以利用次要刻度将刻度标签放在我们想要的任何地方。
感谢所有人的热心!
答案 0 :(得分:9)
对于寻找原始问题答案的人: 可以选择更改tick_label的对齐方式。
这在matplotlib网页上的example中有详细解释。基本上在上面的情况下,人们会使用
ax.get_xaxis().majorTicks[1].label1.set_horizontalalignment('right')
ax.get_xaxis().majorTicks[2].label1.set_horizontalalignment('left')
将标签彼此移开
答案 1 :(得分: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)
答案 2 :(得分:4)
作为对问题的严格回答,您可以获得特定的勾选并使用set_pad()
ax.get_xaxis().majorTicks[2].set_pad()
我认为更好的做法是使用autofmt_xdate
fig = plt.figure()
fig.autofmt_xdate()
它可以很好地旋转xtick标签,并且允许大多数文本很好地适应而不会重叠 如果它们仍然重叠 - 这意味着那些刻度非常接近。然后出现的问题是,如此紧密地联系在一起对你的情节的观众有什么好处呢?