Matplotlib强制输出图像的图形尺寸

时间:2020-06-11 12:18:24

标签: python matplotlib charts

我正在创建一个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'])

创建以下内容: enter image description here

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'])

enter image description here

我希望相反-保持输出大小相同,并根据需要更改图表。

1 个答案:

答案 0 :(得分:1)

我能够设计出以下解决方案。尽管我不认为它是最佳解决方案,但它确实可以解决问题。这个想法如下:

  1. 获取y-tick标签的宽度,以英寸为单位(我使用了this方法)
  2. 提取最大宽度,即最长的刻度标签
  3. 使用width = 9-max(标签宽度),最后重置图形大小

# 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)

enter image description here