使用Matplotlib绘图无线条:保留数组双括号维度的解决方法
如何在保留二维数组维度的情况下用Matplotlib绘图?
你遇到的情况很典型——当你用双括号创建了二维数组(shape为(1,13))时,Matplotlib的plot函数默认会把每一行当作一条独立曲线,但你的数组只有一行,这种二维结构会导致函数无法正确解析数据,最终出现绘图无反应的问题(哪怕加上plt.show()也没用)。
下面是几种既能保留原数组二维维度,又能正常绘图的方法:
方法1:转置数组(你已经发现的可行方案)
转置后数组shape变为(13,1),Matplotlib可以正确识别为一组x/y数据:
import numpy as np import matplotlib.pyplot as plt t = np.array([[0,1,2,3,4,5,6,7,8,9,10,11,12]]) g1 = np.array([[2,2.2,3,4,3.5,4.3,4.9,6,7.9,9.9,9.5,9.6,10]]) plt.figure(1) plt.plot(t.T, g1.T) # 转置数组,原数组维度保持不变 plt.show()
方法2:临时扁平化数组(不修改原结构)
如果你不想改动原数组的维度,可以在绘图时用ravel()或flatten()临时将数组转为一维,原数组的二维结构完全保留:
plt.plot(t.ravel(), g1.ravel()) plt.show()
ravel()返回数组的一维视图(内存复用,效率更高)flatten()返回一维副本(不影响原数组的任何修改)
方法3:直接提取一维数据切片
既然你的二维数组只有一行,直接取第一行的切片即可,这种方式直观且不会改变原数组:
plt.plot(t[0], g1[0]) plt.show()
也可以用np.squeeze()自动去除多余的单维度,效果一样:
plt.plot(np.squeeze(t), np.squeeze(g1)) plt.show()
关于你问的「有没有办法让Python自动识别这种情况」——其实Matplotlib的plot函数设计初衷是支持多曲线绘制(比如传入shape为(M,N)的数组会自动绘制M条曲线),所以对于单条曲线的二维数组,需要我们显式指定取哪部分数据。上面的几种方法都能实现“自动适配”的效果,完全不需要修改原数组的维度结构。
内容的提问来源于stack exchange,提问作者Peter Alexander
相关产品推荐
相关产品推荐

