我正在创建一个matplotlib图形。我希望输出图像的大小(或至少是纵横比)保持一致。
似乎使用figsize
会更改包含的图形,但不会更改图像。
fig, ax = plt.subplots(figsize=(9,9))
ax.barh([0,1,2],[1,5,3])
ax.set_yticks([0,1,2])
ax.set_yticklabels(['a','b','c'])
ticklabels
中的更改会放大图像
fig, ax = plt.subplots(figsize=(9,9))
ax.barh([0,1,2],[1,5,3])
ax.set_yticks([0,1,2])
ax.set_yticklabels(['a really really really really really really long name','b','c'])
我希望相反-保持输出大小相同,并根据需要更改图表。
答案 0 :(得分:1)
我能够设计出以下解决方案。尽管我不认为它是最佳解决方案,但它确实可以解决问题。这个想法如下:
# Rest of your code
fig.canvas.draw()
# Get the labels' widths in inches
label_widths = [item.get_window_extent().transformed(fig.dpi_scale_trans.inverted()).width
for item in ax.get_yticklabels()]
Since the original size was 9 inches by 9 inches, rescale the size
fig.set_size_inches((9-max(label_widths)), 9)