如何向自定义matplotlib绘图函数正确传参避免生成空白图表
问题原因
代码存在两处核心问题导致输出空白图:
- 传参完全错位:调用函数时把时间轴数组
time传给了接收绘图数据的y参数,本该接收时间轴的x参数没传值,真正要画的V(t)、W(t)两组电压数据根本没传入函数,没有有效绘图数据自然输出空白。 - 函数内部判断逻辑有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
相关产品推荐
相关产品推荐

