改变matplotlib yticklabels的位置

时间:2018-03-23 04:01:53

标签: python matplotlib

我想调整matplotlib yticklabels的位置,以便我的yticklabel文本的中心与ytick对齐。

即。在下图中

fig,ax=plt.subplots(1)
ax.plot(n.linspace(0,5,80),1+(n.linspace(0,5,80)/6.),'k',lw=2)
ax.set_ylim([0.8,2.25])
ax.set_xlim([-1.0,7])
ax.set_yticks([1.,1+(1/6.),1+(2/6.),1+(3/6.),1+(4./6),1+(5./6),2])
ax.set_yticklabels(['$f_0$','$f_1$','$f_2$','$f_3$','$f_4$','$f_5$',r'$f_{6}$'])
ax.set_ylabel(r'$f$', rotation='horizontal')
ax.yaxis.set_label_coords(-0.09,0.95)

enter image description here

我希望yticklabels“f_0”...“f_6”与ytick对齐,使得上标的顶部位于刻度线的水平;因此,我需要将位置降低大约2毫米。

我知道我可以“填充”标签,但我不知道如何改变垂直位置。 (目前,我在主题演讲中添加标签,这显然不太理想。)

编辑: 有人指出,这个问题的第二个答案 Aligning rotated xticklabels with their respective xticks 和相应的博文 https://gorelik.net/2017/11/23/how-to-make-a-graph-less-readable-rotate-the-text-labels/ 包括这个问题的解决方案。我同意,但是当我尝试相应地调整我的代码时,这并没有改变任何东西:

fig,ax=plt.subplots(1)
ax.plot(n.linspace(0,5,80),1+(n.linspace(0,5,80)/6.),'k',lw=2)
ax.set_ylim([0.8,2.25])
ax.set_xlim([-1.0,7])
ax.set_yticks([1.,1+(1/6.),1+(2/6.),1+(3/6.),1+(4./6),1+(5./6),2])
ax.set_ylabel(r'$f$', rotation='horizontal')
ax.yaxis.set_label_coords(-0.09,0.95)
labels=ax.set_yticklabels(['$f_0$','$f_1$','$f_2$','$f_3$','$f_4$','$f_5$',r'$f_{6}$'])
for i, label in enumerate(labels):
    label.set_y(label.get_position()[1] - 100.)

我认为这个问题: How to move a tick's label in matplotlib? 包含一个答案,为什么set_y似乎不适合我(虽然我不确定)。如此处所设置的垂直对齐确实会改变yticklabel位置,但对于我想要做的事情来说还不够精确。我还在讨论最后一个问题的主要答案,但我认为我不太了解我在这里所做的事情,所以我想我会在主题演讲中回过头来做这个。

0 个答案:

没有答案