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

Matplotlib绘图异常:plt.plot(t, t**2)绘制出两条线而非一条

为什么plt.plot(t, t**2)画出两条线,plt.plot(t, 10*t)却正常?

嘿,这个问题我之前踩过坑!大概率是你的数组t属于下面两种常见情况之一,我给你慢慢拆解:

最可能的原因:t是复数数组

Matplotlib的plot函数对复数数组有个默认行为——它会把实部和虚部分开各画一条线:

  • 当你跑plt.plot(t, 10*t)时,10*t的实部是t实部的10倍,虚部是t虚部的10倍,这俩序列的比例完全一致,所以两条线会严丝合缝叠在一起,看起来就像只有一条。
  • 但t**2就不一样了:复数平方后,实部是(实部² - 虚部²),虚部是2*实部*虚部,这俩结果完全不成比例,自然就会显示两条独立的线。

怎么验证?

先打印下t的类型和内容看看:

print(type(t))
print(t.dtype)
print(t)

如果输出里dtype是complex64或者complex128,那就是复数数组的锅没跑了。

解决办法

要是你只需要画实数部分的关系,直接把t转成实数就行:

# 方法一:直接在绘图时取实部
plt.plot(np.real(t), np.real(t**2))

# 方法二:先转成实数数组再用
t_real = np.real(t)
plt.plot(t_real, t_real**2)

第二种可能:t是两列的二维数组

要是t的形状是(n, 2)(也就是有n行2列),那t**2会对每一列的元素单独平方。而Matplotlib的plot函数碰到二维数组时,会把每一列当成一个独立的数据集,各画一条线:

  • 跑plt.plot(t, 10*t)时,10*t的每一列都是t对应列的10倍,两条线完全重叠,看起来就像一条。
  • 但t**2的每一列是t对应列的平方,两列的曲线形状肯定不一样,所以就会显出两条线。

怎么验证?

查下t的形状就清楚了:

print(t.shape)

要是输出是(n, 2),那就是二维数组的问题。

解决办法

如果你只需要用其中一列,比如第一列,直接提取出来用就行:

# 取第一列作为新的一维数组
t_single = t[:, 0]
plt.plot(t_single, t_single**2)

小概率情况

还有个不太常见的可能:你之前绘图后没清空画布(比如没关之前的图,也没调用plt.clf()重置),导致新的图叠加上了旧的线。不过这种情况一般是多了之前的线,不是突然冒两条新线,可能性很低,先排查上面两种情况就行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:07:44