You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Python自定义Matplotlib绘图函数嵌入子图并实现并排展示

解决Matplotlib子图中嵌入自定义柱状图函数的问题

你的自定义绘图函数无法适配子图布局,核心问题在于函数没有支持外部传入Axes对象,且内部直接调用plt.show()打断了布局流程。以下是具体修正方案:

1. 修正自定义柱状图函数

修改后的函数支持指定目标Axes,同时修复原函数中的变量误用问题:

def df_bar(df, xcol, ycol, ax=None, xlabel=None, ylabel=None, title=None):
    # 未传入ax时,使用当前活动的Axes
    if ax is None:
        ax = plt.gca()
    # 修正ylabel默认值(原代码误设为xcol)
    if xlabel is None:
        xlabel = xcol
    if ylabel is None:
        ylabel = ycol    
    # 使用传入的df绘图,并指定到目标ax
    df.plot(x=xcol, y=ycol, kind='bar', title=title, width=0.5, legend=False, ax=ax)
    ax.set_xlabel(xlabel)
    ax.set_ylabel(ylabel)
    # 移除内部plt.show(),由外部统一控制显示时机

2. 实现并排展示两次的代码示例

创建1行2列的子图布局,分别将绘图指定到两个子图中:

import matplotlib.pyplot as plt
import pandas as pd

# 替换为你的实际数据
data = {
    'category': ['A', 'B', 'C', 'D'],
    'value': [10, 20, 15, 25]
}
df = pd.DataFrame(data)

# 创建子图布局
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(12, 5))

# 在第一个子图绘制
df_bar(df, xcol='category', ycol='value', ax=ax1, title='第一个柱状图')
# 在第二个子图绘制(可复用相同数据或调整参数)
df_bar(df, xcol='category', ycol='value', ax=ax2, title='第二个柱状图', ylabel='数值')

# 调整子图间距,避免标签重叠
plt.tight_layout()
# 统一显示所有子图
plt.show()

关键修改说明

  • 新增ax参数:允许外部指定绘图的目标Axes,这是适配子图布局的核心
  • 修复textranges_freq变量误用:原函数错误使用了外部变量,改为使用传入的df参数
  • 移除内部plt.show():避免提前触发图形显示,破坏子图整体布局
  • 修正ylabel默认值:原代码误将ylabel默认设为xcol,改为对应ycol参数

内容的提问来源于stack exchange,提问作者Estiven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:34:50