Matplotlib:将y记号与th对齐

2024-04-29 09:27:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有可变长度的刻度标签,我想将它们左对齐(即在较短的刻度标签和y轴之间留一个空间)。有什么合理的方法可以做到这一点吗? 使用水平对齐“左”将它们左对齐,但它们都从轴开始,因此它们最终在绘图中结束。所以另一个问题是-我能改变他们的出发点吗?

演示代码:

import numpy as np
import matplotlib.pyplot as plt

ticks = ["Lorem ipsum dolor sit amet, consectetur adipisicin", "g elit, sed do",      "eiusmod tempor incididunt ut labo", "re et dolore magna ali", "qua. Ut en", "im ad minim veniam, quis nostr", "ud exercitation ullamco labo", "ris nisi ut aliquip ex ea c", "ommodo co", "nsequat. Duis aute irure dolor in rep"]
data = [5,1,2,4,1,4,5,2,1,5]
ind = np.arange(len(data))
fig = plt.figure()
ax = plt.subplot(111)
ax.barh(ind, data, 0.999)
ax.set_yticks(ind + 0.5)
r = ax.set_yticklabels(ticks)#, ha = 'left')
fig.set_size_inches(12, 8)
fig.savefig(r'C:\try.png', bbox_extra_artists=r, bbox_inches='tight')

Tags: importdataasnpfigplt标签ax
1条回答
网友
1楼 · 发布于 2024-04-29 09:27:37

您只需要添加一个pad。见matplotlib ticks position relative to axis

yax = ax.get_yaxis()
yax.set_tick_params(pad=pad)

(doc)

要计算垫子应该是什么:

import numpy as np
import matplotlib.pyplot as plt

ticks = ["Lorem ipsum dolor sit amet, consectetur adipisicin", "g elit, sed do",      "eiusmod tempor incididunt ut labo", "re et dolore magna ali", "qua. Ut en", "im ad minim veniam, quis nostr", "ud exercitation ullamco labo", "ris nisi ut aliquip ex ea c", "ommodo co", "nsequat. Duis aute irure dolor in rep"]
data = [5,1,2,4,1,4,5,2,1,5]
ind = np.arange(len(data))
fig = plt.figure(tight_layout=True) # need tight_layout to make everything fit
ax = plt.subplot(111)
ax.barh(ind, data, 0.999)
ax.set_yticks(ind + 0.5)
r = ax.set_yticklabels(ticks, ha = 'left')
fig.set_size_inches(12, 8, forward=True) 
# re-size first, the shift needs to be in display units
plt.draw()  # this is needed because get_window_extent needs a renderer to work
yax = ax.get_yaxis()
# find the maximum width of the label on the major ticks
pad = max(T.label.get_window_extent().width for T in yax.majorTicks)

yax.set_tick_params(pad=pad)
plt.draw()

demo of code

相关问题 更多 >