繁体   English   中英

调整我的 matplotlib 图表的大小,以便图表的大小始终保持一致,即使 ylabel 长度变化很大

[英]Size my matplotlib charts so that size of chart is always consistent even with widely varying ylabel lengths

我的 matplotlib 图表输出遇到了问题,我将其导出为 SVG 文本(使用fig.savefig()并在 Web 应用程序中呈现为服务器端呈现的分析)。

这些图表之一是水平条形图 - 如下图所示,细节惊人 -

                  _______________________
       item1_name |----                 |
       item2_name |--------             |
        something |----------           |
thing thing thing |-------------        |
      other thing |---------------------|
                  ---1---2---3---4---5---
                        some metric       

我的问题是当这些标签非常大时,它们会引起麻烦。

使用fig.tight_layout()

                  _______________________
ry Very Long Name |----                 |
eft Side Gets Cut |--------             |
 Keep Getting Cut |----------           |
names are getting |-------------        |
   cutoff on left |---------------------|
                  ---1---2---3---4---5---
                        some metric       

绘图渲染正常,但左侧的 X 轴标签被切断(奇怪的是,在某些情况下,绘图实际上似乎渲染得比正常

使用rcParams.update({'figure.autolayout': True})

                                 ________
My Very Very Very Very Long Name |-     |
                Now I Am Smushed |--    |
             Chart is very small |---   |
             but names are being |----- |
                rendered in full |------|
                                 -1----5-
                                 some metr      

名称完整呈现,但情节被压缩以腾出空间。

我希望使它始终保持完全相同的大小,无论 x 轴的比例,y 标签的长度如何 - 同时也不要在左侧切割 ylabels

是否有 mpl 方便的方法来呈现整个图表和标签而不会失真/截止? 我相信tight_layout()应该这样做,但只适用于 xlabels。

如果没有,是否有一种方法可以获取 ylabel 所需的大小,然后我可以将其与fig.set_size_inches() ,如下所示:

label_inches_needed = get_label_size(axes)
plot_consistent_height = 4
plot_consistent_width = 10
fig.set_size_inches(plot_consistent_width + label_inches_needed, plot_consistent_height)

感谢您的任何建议,并感谢您查看我的图表。

参考 - 为什么我的 xlabel 在我的 matplotlib 图中被切断?

为确保标签不会被剪掉,请在保存时尝试使用选项 bbox。 我无法验证您的情况,因为您没有为您的数字提供代码,但这通常可以解决问题。

plt.savefig(figname, bbox_inches = "tight")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM