matplotlib 自定义X标记和标签的位置

dgiusagp  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(105)

对于一个简单的条形图,我希望我的一些x-tick标签位于x轴下方(对于正y值),而另一些则位于x轴上方(对于负y值)。
我看到,根据文档,一个字符串可以作为参数传递给matplotlib.axes.Axes.set_xticklabel来改变垂直对齐,但这是一个笼统的应用程序。

如何实现特定x-tick标签的任意定位?

bxpogfeg

bxpogfeg1#

你可以在for循环中修改标签的位置/旋转。最初,我认为改变旋转点就足够了,但是标签锚定在刻度的尖端,所以结果是次优的。
这是我的代码。你可能想调整y的位置,以获得你想要的对齐方式:

N = 10
h = np.linspace(-10,10,N)
xticks = [f'test #{n}' for n in range(N)]

fig, ax = plt.subplots()
ax.spines['bottom'].set_position('zero')
ax.bar(range(N),h)
ax.set_xticks(range(N))
ax.set_xticklabels(xticks)

for i,(g,t) in enumerate(zip(h,ax.get_xticklabels())):
    if g<0:
        t.set_ha('left')
        t.set_va('bottom')
    else:
        t.set_ha('right')
        t.set_va('top')
    t.set_rotation_mode('anchor')
    t.set_rotation(45)
    t.set_transform(ax.transData)
    t.set_position((i,0))

相关问题