plt.savefig() 会裁剪图像

后端开发 2026-07-09

我需要把一个绘图和相应的数据并排显示。下面的代码能得到结果,但有两个问题:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# Creating dataset
df = pd.DataFrame({'Month':['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sept','Oct','Nov','Dec'],
                   '2024':[1945,1290,1662,1500,1355,1469,1209,1429,1662,1350,1525,1625],
                   '2025':[1695,1767,1475,1518,1556,1441,1467,1557,1421,1460,950,715]})

plt.plot(df['Month'],df['2024'],'g', label='2024')
plt.plot(df['Month'],df['2025'],'r', label='2025')
plt.title('Revenues')

the_table = plt.table(cellText=df.to_numpy(),colLabels=df.columns,loc='top',bbox=[1.1,0,1,1])
plt.savefig(path,'table_test.png')
print(plt)

在此输入图片描述

问题1: 我希望表格只占用空间的1/3,图形占用2/3。目前,两者各占用50%的空间。我需要使用 subplot2grid 吗?

大概是这样:

在此输入图片描述

问题2:当我使用下面的代码行保存这张图片时,保存的是被截断/裁剪的图片,而不是完整的图片。

plt.savefig(path,'table_test.png')

这是保存的图片: 在此输入图片描述

如何才能保存完整的图片?

解决方案

正如你建议的,可以使用 subplot2grid 来实现。(文档中的示例)

我使用与 @NullDev相同的命名,因为其余部分都一样。

# (1 row, 3 columns), (row,col), ...
ax_plot  = plt.subplot2grid((1, 3), (0, 0), colspan=2)
ax_table = plt.subplot2grid((1, 3), (0, 2))

完整代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# Creating dataset
df = pd.DataFrame(
    {
        "Month": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec"],
        "2024": [1945, 1290, 1662, 1500, 1355, 1469, 1209, 1429, 1662, 1350, 1525, 1625],
        "2025": [1695, 1767, 1475, 1518, 1556, 1441, 1467, 1557, 1421, 1460, 950, 715],
    }
)

# (1 row, 3 columns), pos
ax_plot = plt.subplot2grid((1, 3), (0, 0), colspan=2)
ax_table = plt.subplot2grid((1, 3), (0, 2))

ax_plot.plot(df["Month"], df["2024"], "g", label="2024")
ax_plot.plot(df["Month"], df["2025"], "r", label="2025")
ax_plot.set_title("Revenues")

ax_table.axis("off")
ax_table.table(
    cellText=df.to_numpy(),
    colLabels=df.columns,
    loc="center",
    bbox=[0, 0, 1, 1],
)

plt.savefig("table_test.png")
plt.show()

在此输入图片描述

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章