Python 图例条目的数量等于数据集的大小

Python 图例条目的数量等于数据集的大小,python,matplotlib,label,legend,handle,Python,Matplotlib,Label,Legend,Handle,我正在for循环中绘制多组数据。集合的数量和集合的大小在打印时没有任何问题。当我尝试添加一个传奇时,事情变得有趣起来。我有一个传奇,但我只得到第一个标签显示数百次!我有一个数据集,有887个点,我有887个图例条目 您可以在此处访问.py和.xlsx文件: 下面是生成绘图的代码 # Temperature Data plotting ================================================= #initialize figure plt.figure(

我正在for循环中绘制多组数据。集合的数量和集合的大小在打印时没有任何问题。当我尝试添加一个传奇时,事情变得有趣起来。我有一个传奇,但我只得到第一个标签显示数百次!我有一个数据集,有887个点,我有887个图例条目

您可以在此处访问.py和.xlsx文件:

下面是生成绘图的代码

# Temperature Data plotting 
=================================================
#initialize figure
plt.figure(figsize=(11,8))
Color = 'C'
Marks = '*','o','+','x','s','d','.'
nm = len(Marks)
q = 0 # Marks counter
c = 0 # color counter
for k in range(0,nt):
    style = 'C' + str(c) + Marks[q]
    test = 'T' + str(k)
    plt.plot([t+t_adjust[k]],[Temps[:,k]],style,label=test)
    #, label = 'test'
    c += 1
    if(c==6):
        c = 9
    if(c==10):
        c = 0
        q += 1
    if(k > nt-10):
        q = nm - 1
# Formatting Figure
#names = '1','2','3','4','5'
#name1 = '1'
#pylab.legend([name1])
#from collections import OrderedDict
#import matplotlib.pyplot as plt
#handles, labels = plt.gca().get_legend_handles_labels()
#by_label = OrderedDict(zip(labels, handles))
#plt.legend(by_label.values(), by_label.keys())      
plt.legend(loc = 'upper right')
plt.show()
# x axis limits, in seconds
plt.xlim(0,60)
plt.xlabel('t (s)')
plt.ylabel('T (deg C)')
FigTitle = (oper_name + '; ' + str(pres_val) + pres_unit + '; d=' +
    str(diam_val) + diam_unit + '; H=' + str(dist_val) + dist_unit)
plt.title(FigTitle)
# End Temperature Data Plotting     
==============================================
我有14组数据,每组887分。显然有超过14个图例条目。不知道为什么它引用了数据的长度或其他什么。我找到了这个(下面的代码)来查找句柄和标签,但是我需要为每个数据集指定样式名,而不是为数据长度指定第一个样式名

#from collections import OrderedDict
#import matplotlib.pyplot as plt
#handles, labels = plt.gca().get_legend_handles_labels()
#by_label = OrderedDict(zip(labels, handles))
#plt.legend(by_label.values(), by_label.keys())

不查看数据很难说,但您始终可以手动控制进入图例的内容,如下所示:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0., 2*np.pi, 101, endpoint=True)

lns = []
for i in range(1, 10):
    for j in range(10):
        ln = plt.plot(x, j*np.sin(x/i), label="series i={:d}".format(i))

    lns += ln # note plt.plot returns a list of entities

plt.legend(lns, [l.get_label() for l in lns], loc="best")
plt.show()

发布一段代码会很有用,这段代码实际上显示了错误,最好是可复制的。(帮助他人帮助您)有时可能会在实际代码中出现意外错误,但在提供的
代表性代码中却没有。另外,这里有很多注释掉的代码。这对这个问题有用吗?我很困惑:您的绘图显示标签
“hmmm”
,但这些字母甚至没有出现在代码中。相反,人们希望看到标签以“T”开头,后跟一些数字。我确信,一旦您提供了一个,即一个可运行的代码,该代码复制了不希望出现的行为,它将在几分钟内得到解决。@Tushar,我已经为您添加了一个链接,供您下载我正在使用的代码和Excel文件。@ImportanceOfBeingErnest,我更新了该图以正确表示正在发生的情况,我在提交之前忘记了更新该图。代码可以在谷歌硬盘的链接上找到。对不起,我不会这么叫。但是,也许其他人有足够的带宽下载这些东西并浏览那些冗长的代码。那么,我可以把某种字符串系列放在“series I={:d}”的位置吗?是的,这里我只是编了一个例子,但是你可以在一个单独的列表中定义标签,其中包含匹配范围(1,10)的元素。如果是这样,您甚至可以用该列表替换图例中的[l.get_label()for l in lns]位。