Matplotlib:如何从数组的列中绘制多行,但给它们一个标签?

时间:2014-09-15 19:00:25

标签: python matplotlib plot label legend

我想绘制一个数组的多个列,并在图例中标记它们。但是在使用时:

x = np.loadtxt('example_array.npy')
plt.plot(x[:,1:3],label = 'first 2 lines')
plt.plot(x[:,3:5],label = '3rd and 4th lines')
plt.legend()

我获得了与我所拥有的线条一样多的传奇标签。因此,上面的代码在图例框中产生了四个标签。

必须有一种简单的方法为一组线分配标签?!但我找不到它......

我想避免诉诸

x = np.loadtxt('example_array.npy')
plt.plot(x[:,1],label = 'first 2 lines')
plt.plot(x[:,1:3])
plt.plot(x[:,3],label = '3rd and 4th lines')
plt.plot(x[:,3:5])
plt.legend()

提前致谢

2 个答案:

答案 0 :(得分:1)

如果您想要两个列的相同标签和刻度,您可以在绘图之前合并列。

x = np.loadtxt('example_array.npy')
plt.plot(x[:,1:3].flatten(1),label = 'first 2 lines')
plt.plot(x[:,3:5].flatten(1),label = '3rd and 4th lines')
plt.legend()

希望这有帮助。

答案 1 :(得分:1)

因此,如果我找到你的话,你想一次性应用你的标签,而不是在每一行输入你的标签。

您可以做的是将元素保存为数组,列表或类似元素,然后迭代它们。

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(1,10)
y1 = x
y2 = x*2
y3 = x*3

lines = [y1,y2,y3]
colors  = ['r','g','b']
labels  = ['RED','GREEN','BLUE']

# fig1 = plt.figure()
for i,c,l in zip(lines,colors,labels):  
    plt.plot(x,i,c,label='l')
    plt.legend(labels)    
plt.show()

导致: result:

另外,请查看@Miguels答案:"Add a list of labels in Pythons matplotlib"

希望它有所帮助! :)