python - 将 matplotlib 保存为最终给定大小(包括标题)

标签 python python-3.x matplotlib

我正在制作用于发布的数据。我需要最终的图形,包括 3 英寸宽的标题和文本,并保存为 .tiff 文件。我知道我可以使用 matplotlib 指定绘图的大小 matplotlib.pyplot.figure(figsize=(3,2), dpi=300) 然而,这仅指定了实际情节的大小,不包括标题和所有内容。此外,当我尝试此方法时,标题会从我保存的 .tiff 文件中被截断。当然,简单的解决方法是减小绘图的大小并手动使图形达到正确的大小,但是有人知道一种自动方法使绘图成为给定的最终大小并包含所有附加功能吗?

这是保存的输出图像(这是一个 png,因此可以上传到 stackoverflow)。请注意,由于某种原因,情节标题被剪掉了。 enter image description here

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from PIL import Image
from io import BytesIO


bent=[2.83263904,2.75860489,2.64546045,2.4949913,2.34923737,2.16430217,2.02562783,1.82478841,1.70324689,1.70315642,1.39739535,1.33945747,1.22295623,1.15726486,1.08449954,0.96155077,0.90325786,0.84547091]
bent=[i/27 for i in bent]
print(bent)

planar=[4.11233905,3.93027011,3.65135645,3.38525615,3.1130921,2.81042899,2.58995789,2.36159934,2.15981447,1.9964454,1.74375941,1.63263452,1.48503205,1.38596544,1.26501988,1.17391638,1.07490417,0.99369748]
planar=[i/27 for i in planar]

bi=[2.51027966,2.56495852,2.47033072,2.33008642,2.19395126,2.13732249,1.80922673,1.76037446,1.52930137,1.56732451,1.33905847,1.24952153,1.15699233,1.08251496,0.98449116,0.93838164,0.86542147,0.725736]
bi=[i/34 for i in bi]

T=[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]

arr=[bi,bent,planar]
arr=np.array(arr)
arr=arr.T

font = {'family' : 'normal',
        'weight' : 'normal',
        'size'   : 8}

matplotlib.rc('font', **font)


fig = plt.figure(figsize=(3,2), dpi=300)

plt.title("-ΔS$_m$ vs T") #for Fe$_4$Gd
plt.xlabel('Temperature (K)')
plt.ylabel("$-ΔS_m$ ($J.K^{-1}.mol^{-1}n (e^{-})^{-1}$)")
MMM=('Fe$_4$Gd$_2$','Fe$_4$Gd bent','Fe$_4$Gd planar')

plt.plot(T,arr,'o')
plt.legend(MMM, loc='best')






# save figure
# (1) save the image in memory in PNG format
png1 = BytesIO()
fig.savefig(png1, format='png')

# (2) load this image into PIL
png2 = Image.open(png1)

# (3) save as TIFF
png2.save('TESTTESTTEST.tiff')
png1.close()

最佳答案

使用plt.tight_layout()。您可以查看更多详情here .

关于python - 将 matplotlib 保存为最终给定大小(包括标题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53840278/

相关文章:

python - 动画阻尼振荡器

javascript - 如何在 Python 中评估 javascript 代码

python - Kivy 弹出窗口显示背景小部件

python - Timezone.now() 与 datetime.datetime.now()

python - Kivy:使用 kivy.storage.jsonstore 在另一个 JSON 对象中添加 JSON 对象

python - 在 Python3 上是否有 Ansible 的替代品

python - 为什么 matplotlib.PatchCollection 弄乱了补丁的颜色?

Python - 面向 CSV 时间的将大量列转换为行

python - 复制 pandas 数据框中的列

python - 导入错误:无法导入名称 '_path' matplotlib