我有一个文件in.txt,它有很多行。和1-20列(未定义)。并且包含数字。
我用这个代码画了一张图
y=np.loadtxt('in.txt')
t=np.arange(len(y))*1
plt.subplot(211)
plt.title(r'in')
plt.grid(1)
plt.plot(t,y, label = 'in')
plt.legend(borderpad = 0.1, labelspacing = 0.1)
plt.show()
这就是我现在所拥有的(在这个例子中,我在.txt文件中有10列)
但是,不是图例中的所有名称都是"in",而是像"1"、"2"、"3"等名称(从1到n,其中n是我的in.txt文件中的列数)
实现这一点的一种方法是在for循环的迭代中绘制每一行。例如:
y = np.random.random((3,5)) # create fake data
t = np.arange(len(y))
plt.subplot(211)
plt.title(r'in')
plt.grid(1)
for col_indx in range(y.shape[1]):
plt.plot(t, y[:,col_indx], label = col_indx)
plt.legend(borderpad = 0.1, labelspacing = 0.1)
plt.show()
或者,在您的情况下,我建议使用plt.legend
调用的可选参数。像这样:
plt.plot(t, y)
plt.legend(range((len(y)))
如果您想更高级一点,请查看plt.legend
的文档字符串。
如果您想开始使用基于1的索引而不是基于零的索引进行标记,请不要忘记在标签和范围中添加+1
;-)
您正在利用plot
中对x/y的广播,但kwargs也没有得到广播。任一
x = np.arange(25)
y = np.random.rand(25, 6)
fig, ax = plt.subplots()
for j, _y in enumerate(y.T, start=1):
ax.plot(x, _y, label=str(j))
ax.legend(borderpad=0.1, labelspacing=0.1)
或
fig, ax = plt.subplots()
lns = ax.plot(x, y)
labels = [str(j) for j in range(1, y.shape[1] + 1)]
ax.legend(handles=lns, labels=labels, borderpad=0.1, labelspacing=0.1)