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

如何向自定义matplotlib绘图函数正确传参避免生成空白图表

问题原因

代码存在两处核心问题导致输出空白图:

  1. 传参完全错位:调用函数时把时间轴数组time传给了接收绘图数据的y参数,本该接收时间轴的x参数没传值,真正要画的V(t)、W(t)两组电压数据根本没传入函数,没有有效绘图数据自然输出空白。
  2. 函数内部判断逻辑有bug:用if not x判断是否传入x轴参数的写法不适用于numpy数组,当x是numpy数组时这个判断会抛出真值歧义错误,同时原循环逻辑在接收到一维数组时,会把数组里的每个单独数值当成一条线绘制,根本画不出连续曲线。
修正后可运行代码
import numpy as np
import matplotlib.pyplot as plt

def plot_fig(y, ylim=(), x=None, xlim=()):
    plt.figure()
    plt.title("v,w Vs Time")
    color = ["b", "r"]
    # 修正参数判断逻辑,用is None判断是否传入x轴
    if x is None:
        for idx, data in enumerate(y):
            plt.plot(data, color=color[idx])
    else:
        for idx, data in enumerate(y):
            plt.plot(x, data, color=color[idx])
    if ylim:
        plt.ylim(ylim)
    if xlim:
        plt.xlim(xlim)
    plt.xlabel("Time")
    plt.ylabel("Voltage")
    plt.legend(["V(t)", "W(t)"])
    plt.grid()
    plt.show()

xlim = (-0.5, 1.5)
ylim = (-0.45, 0.45)
time = np.linspace(-0.5, 1, num=100)
# 替换成你自己的V、W真实数据即可
v = 0.4 * np.sin(2 * np.pi * time)
w = 0.3 * np.cos(2 * np.pi * time)
# 正确传参:y传两组待绘制的电压序列,x传时间轴
plot_fig(y=[v, w], ylim=ylim, x=time, xlim=xlim)
传参注意事项
  • y参数必须传入所有待绘制的y轴序列,也就是你要画的V(t)、W(t)两个数组,不能传时间轴
  • x参数专门接收时间轴数组,不要漏传
  • 判空参数时统一用is None写法,不要用if not 变量,避免numpy、pandas类数据结构触发判断错误
  • 绘图循环按序列索引匹配颜色,保证线条颜色和图例一一对应

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:39:20