我正在for循环中绘制许多数据集。集的数量和集的大小在绘制时没有任何问题。当我尝试添加图例时,事情变得很有趣。我得到一个图例,但我只得到第一个显示数百次的标签!我有一个带有887点的数据集,我得到了887个图例条目。Here is the plot I get
您可以在此处访问.py和.xlsx文件: https://drive.google.com/drive/folders/1QCVw2yqIHexNCvgz4QQfJQDGYql1hGW8?usp=sharing
这是生成绘图的代码。
# 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())
答案 0 :(得分:0)
不用看数据就不用说了,但是您总是可以像这样手动控制图例中的内容:
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()