Matplotlib绘图与表格布局占比调整及保存截断问题求助
Matplotlib绘图与表格并排的问题解决
问题1:调整绘图与表格的空间占比(绘图2/3,表格1/3)
不需要使用subplot2grid,采用坐标轴宽度比例划分的方式更直接。通过gridspec_kw参数设置两个坐标轴的宽度比为2:1,分别用来绘制折线图和放置表格,即可实现绘图占2/3、表格占1/3的布局。
修正后的核心代码:
import numpy as np import pandas as pd import matplotlib.pyplot as plt # 创建数据集 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行2列的坐标轴,宽度比例2:1 fig, (ax_plot, ax_table) = plt.subplots(1, 2, figsize=(12,6), gridspec_kw={'width_ratios': [2, 1]}) # 绘制折线图 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_plot.legend() ax_plot.tick_params(axis='x', rotation=45) # 旋转x轴标签避免重叠 # 放置表格并隐藏多余坐标轴元素 ax_table.axis('off') the_table = ax_table.table(cellText=df.to_numpy(), colLabels=df.columns, loc='center') the_table.auto_set_font_size(False) the_table.set_fontsize(10) the_table.scale(1, 1.2) # 调整表格行高,优化显示效果
问题2:完整保存图像,避免截断
图像截断的原因是表格超出了默认的画布边界,有两种简单解决方式:
方式1:保存时添加bbox_inches='tight'参数
该参数会让Matplotlib自动扩展画布,容纳所有元素:
plt.savefig('table_test.png', bbox_inches='tight', dpi=100)
方式2:创建画布时开启自动布局
通过constrained_layout=True让布局系统自动适配元素位置,无需额外调整保存参数:
# 创建画布时开启自动布局 fig, (ax_plot, ax_table) = plt.subplots(1, 2, figsize=(12,6), gridspec_kw={'width_ratios': [2, 1]}, constrained_layout=True) # 绘图、添加表格... plt.savefig('table_test.png', dpi=100)
注意:原代码中plt.savefig(path,'table_test.png')参数顺序错误,正确格式应为plt.savefig('文件路径/table_test.png', 其他参数)。
内容的提问来源于stack exchange,提问作者cph_sto
相关产品推荐
相关产品推荐

