Matplotlib绘制NumPy矩阵元素时出现异常行为求助
问题根源与解决方案
嘿,这个奇怪的现象其实是NumPy矩阵的二维特性和Matplotlibplot函数的参数解析逻辑差异导致的,我来给你拆解清楚:
为什么会出现两种不同结果?
你创建t的时候用了np.matrix,这会生成一个二维行矩阵(维度是(1, 1024)),对应的x = np.sinc(t)也是同样维度的二维矩阵。而Matplotlib的plot函数对二维输入的处理,在两种调用方式下有明显区别:
- 当你显式指定
color、linestyle等参数时:plt.plot(t,x,color='blue', linestyle='solid', linewidth=2),Matplotlib会把二维数组的每一列当作一条曲线来绘制。因为你的矩阵只有1列,所以会正常画出sinc函数的曲线。 - 当你用简写格式字符串
'-ob'时:plt.plot(t,x,'-ob'),Matplotlib的解析逻辑会把输入的二维数组展平成一维,然后将t和x的所有元素一一配对绘制。这就导致了点被错误地连接,出现混乱的图形(比如折线乱跳或者密集的点)。
怎么解决?
有两种简单的修复方式:
- 放弃使用
np.matrix,改用np.array(推荐,因为现在NumPy官方更推荐用array而非matrix):import numpy as np import matplotlib.pyplot as plt t = np.linspace(-10,10,1024) # 直接生成一维数组 x = np.sinc(t) plt.plot(t,x,color='blue', linestyle='solid', linewidth=2) # 或者用简写格式,结果完全一致 # plt.plot(t,x,'-ob') plt.show() - 如果一定要保留
np.matrix,把它转成一维数组:
可以用.A.flatten()或者.ravel()方法把二维矩阵转成一维数组,这样两种plot写法都会正常工作:plt.plot(t.A.flatten(), x.A.flatten(), '-ob')
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

