考虑一个小的numpy数组:
array([[ 0., 1., 0., 1., 0., 0., 0., 0., 0., 1.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 18., 15., 25., 0., 0., 0.],
[ 0., 0., 0., 23., 19., 20., 20., 0., 0., 0.],
[ 0., 0., 20., 22., 26., 23., 18., 0., 0., 0.],
[ 0., 0., 0., 23., 16., 20., 13., 0., 0., 0.],
[ 0., 0., 0., 0., 18., 20., 18., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 1., 0., 0., 0., 0., 0.]])
我想绘制,从行号3到行号6,即我的numpy数组的一部分(我来自matlab背景)。我怎么能循环这个?或者如何在同一个图表中绘制我的numpy数组的多行?
到目前为止,我已经尝试过;我定义了一个任意的x:
x = np.arange(0,10)
然后如果我使用
plt.plot(x,data[3,:])
绘制第三行,它确实很好。如果我尝试,就会出现问题:
plt.plot(x,data[3:4,:])
我得到错误" x和y必须具有相同的第一维",我理解这是因为他将第3行和第4行堆叠在一起,因此x和y不具有相同的维度。我怎么能克服这个?
谢谢
答案 0 :(得分:4)
如错误所示,您的data.shape = (1,10)
与您的输入x.shape = (10,)
不一致。要解决此问题,您只需使用.T
转换数据,即
plt.plot(x, data[3:4,:].T)
此外,请注意data[3:4,:]
与data[3,:]
相同,例如,您需要使用data[3:5,:]
来获取第3行和第4行。
答案 1 :(得分:2)
您可以尝试:
for i in range(3):
plt.plot( x , data[ i , : ] )
plt.show()
如果您想要一系列行,例如3到6行,您可以使用:
range(3,7,1)
,其中1是步骤,3是起始行,7是我们想要绘制的最后一行(6)加一个
答案 2 :(得分:2)
更好地应用psuedocubi's
答案。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,10,10)
y = np.array(YOUR DATA HERE)
plt.plot(x,a[3:4].T,'r--',label="x vs y1") #CONTAINS YOUR 3RD ROW
plt.plot(x,a[4:5].T,'g--',label="x vs y2") #CONTAINS YOUR 4TH ROW
plt.plot(x,a[5:6].T,'b--',label="x vs y3") #CONTAINS YOUR 5TH ROW
plt.legend(loc='best')
plt.xlabel("x")
plt.ylabel("y")
plt.show()
此处x
已使用您自己的数据绘制!