gpt4 book ai didi

python - 长行自动展开 Canvas

转载 作者:太空宇宙 更新时间:2023-11-03 11:56:25 24 4
gpt4 key购买 nike

如何在使用 figtext() 添加文本时(垂直)扩展图形/绘图/图形?

代码是这样的:

plt.figtext(0.5 ,0, u'first line\nsecond line\nthird line', ha='center')

所以我需要自动扩展图像以适应绘图、x 轴标签和图形文本。当前文本 first line\nsecond line\nthird line 与 x 轴标签重叠。

最佳答案

到目前为止,还没有自动执行此操作的方法,因为有许多可能的问题需要考虑,例如调整子图时应考虑属于该图形的哪些艺术家

目前,您可以根据具体情况手动执行此操作。您需要知道包含文本的框的大小。由于您知道图形文本位于底部,因此您会假设此文本框的顶部应被视为图形的"new"底部。

我使用 tight_layout 模块提供的 get_renderer 来获取有关 dpi 中文本大小的适当信息。

这个例子说明了基本思想:

from matplotlib.tight_layout import get_renderer
import matplotlib.pyplot as plt

FONTSIZE=20

# set up example plots
fig = plt.figure()

ax1 = fig.add_subplot(211)
ax1.plot(range(10,1,-1))
ax1.set_title('ax1',fontsize=FONTSIZE)
ax1.set_xlabel('X axis',fontsize=FONTSIZE)
ax1.set_ylabel('Y axis',fontsize=FONTSIZE)

ax2 = fig.add_subplot(212)
ax2.plot(range(1,10,1))
ax2.set_title('ax1',fontsize=FONTSIZE)
ax2.set_xlabel('X axis',fontsize=FONTSIZE)
ax2.set_ylabel('Y axis',fontsize=FONTSIZE)

# tighten things up in advance
print "Subplots 'bottom' before tight_layout: ",fig.subplotpars.bottom
plt.tight_layout()
print "Subplots 'bottom' after tight_layout: ",fig.subplotpars.bottom
fig.savefig('noFigText.png')

# add and deal with text
bigFigText = plt.figtext(0.5 ,0.05,
u'first line\nsecond line\nthird line',
ha='center')
# textLimitsDpi is a 2x2 array correspoinding to [[x0,y0],[x1,y1]]
textLimitsDpi = bigFigText.get_window_extent(renderer=get_renderer(fig),
dpi=fig.get_dpi()).get_points()

# we really just need y1
textHeightFig = fig.transFigure.inverted().transform((0,textLimitsDpi[1,1]))[1]

# make adjustment to bottom
fig.subplots_adjust(bottom=fig.subplotpars.bottom+textHeightFig)

print "Subplots 'bottom' after figtext: ",fig.subplotpars.bottom
fig.savefig('withFigText.png')
plt.show()

结果输出是:

Subplots 'bottom' before tight_layout: 0.1

Subplots 'bottom' after tight_layout: 0.109166666667

Subplots 'bottom' after figtext: 0.259166666667

没有文字的紧凑布局图是: enter image description here

但是在添加文字的时候,调整为: enter image description here

hspace subplot 参数可能需要调整,具体取决于 figtext 文本框的大小。请注意,我垂直移动了文本 (0.05),并且由于我使用文本框的 y1 来调整底部的子图参数,因此考虑了此调整。

理想情况下,考虑到 y 范围的新下限(即不为 0),您可能希望重做 tight_layout 完成的工作,但以下是对大多数字体大小 (8-48) 表现良好的 hack figtext 文本框:

# make adjustment to bottom
top = fig.subplotpars.top
bottom = fig.subplotpars.bottom
newHspace = (fig.subplotpars.hspace
*(top-bottom)
/(top-bottom-textHeightFig))
fig.subplots_adjust(bottom=bottom+textHeightFig,
hspace=newHspace)

关于python - 长行自动展开 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8587543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com