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

Python Pandas Matplotlib:如何利用自定义函数绘制子图?

我来帮你搞定这个问题~你遇到的问题主要有两个关键点:一是重复指定了同一个子图位置(两次都用了plt.subplot(1,2,1)),二是你的自定义绘图函数可能没有明确指定要绘制到哪个子图轴上,导致默认覆盖了当前轴。

下面给你一套完整的解决方案,包含修改自定义函数和正确绘制子图的示例代码:

第一步:修改自定义函数,支持指定子图轴

我们需要给myFunction加一个可选的ax参数,让它可以把图画到我们指定的子图坐标轴上,同时保留原来的使用方式(不传ax时默认用当前轴):

import matplotlib.pyplot as plt
import numpy as np  # 示例用,你可以换成自己的数据逻辑

def myFunction(arg1, arg2, ax=None):
    # 如果没传入ax,就用当前默认的坐标轴
    if ax is None:
        ax = plt.gca()
    
    # 这里替换成你自己的绘图逻辑,下面是示例:用arg1和arg2生成线性图
    x = np.linspace(0, 10, 100)
    y = arg1 * x + arg2
    
    ax.plot(x, y, linewidth=2)
    ax.set_title(f"参数:arg1={arg1}, arg2={arg2}")
    ax.set_xlabel("X轴")
    ax.set_ylabel("Y轴")

第二步:在JupyterLab中绘制多张子图

这里提供两种常用的写法,你可以选自己习惯的:

写法一:一次性创建所有子图(更推荐)

这种方式可以直接拿到每个子图的坐标轴对象,精准控制绘图位置:

# 创建1行2列的子图布局,指定整体图大小
fig, (ax_left, ax_right) = plt.subplots(1, 2, figsize=(12, 5))

# 分别在两个子图上调用自定义函数,传入对应的坐标轴
myFunction(arg1=2, arg2=3, ax=ax_left)
myFunction(arg1=5, arg2=-2, ax=ax_right)

# 自动调整子图间距,避免标题、标签重叠
plt.tight_layout()
plt.show()

写法二:逐个指定子图位置

如果你习惯用plt.subplot()逐个切换子图的方式,也可以这么写:

# 先创建一个空画布,指定大小
plt.figure(figsize=(12, 5))

# 第一个子图:1行2列的第1个位置
plt.subplot(1, 2, 1)
myFunction(arg1=2, arg2=3)  # 当前轴是第一个子图,无需传ax也能正常绘制

# 第二个子图:1行2列的第2个位置
plt.subplot(1, 2, 2)
myFunction(arg1=5, arg2=-2)

plt.tight_layout()
plt.show()

为什么你之前的代码不行?

你两次都调用了plt.subplot(1,2,1),相当于两次都选中了同一个子图位置,第二次调用myFunction会把新图直接覆盖在第一个子图上,自然得不到你想要的左右两张子图效果。加上自定义函数支持ax参数后,就能彻底避免这种轴混乱的问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:27:44