我正在绘制两个条件,并且只需要两个图例。但是我的数据中有重复项,每个重复项都有一个单独的图例。为什么?如果以前已经解决过这个问题,我深表歉意,但是我为此花费了很多令人尴尬的时间,而且我发现很多情况对于我的情况来说似乎过于复杂。任何帮助,将不胜感激。
import matplotlib.pyplot as plt
import pandas as pd
#####read and organize data
alldata = pd.read_csv('Fig_1.csv')
CondtionA = list(zip(alldata.iloc[:,1],alldata.iloc[:,2]))
ConditionB = list(zip(alldata.iloc[:,7],alldata.iloc[:,8]))
### make the figure
fig, ax = plt.subplots()
plt.plot(alldata['Temperature'],ConditionA,linewidth = 1,c='k', linestyle = '--',label = 'ConditionA')
plt.plot(alldata['Temperature'],ConditionB,linewidth = 1,c='k', label = "ConditonB")
ax.legend(numpoints=1)
plt.show()
答案 0 :(得分:2)
您应该只能从每个plot
调用的返回行的第一行中创建图例。
lines1 = plt.plot(...)
lines2 = plt.plot(...)
plt.legend(handles=(lines1[0], lines2[0]), labels=("Label A", "Label B"))
这里的缺点是您需要手动重新命名标签。
如果这是不需要的,但又又知道要使用最初创建的图例中的第二个句柄和标签,则可以通过get_legend_handles_labels()
获取这些句柄和标签。
handles, labels = plt.gca().get_legend_handles_labels()
plt.legend(handles[::2], labels[::2])
import numpy as np; np.random.seed(10)
import matplotlib.pyplot as plt
x=np.arange(10)
a = np.cumsum(np.cumsum(np.random.randn(10,2), axis=0), axis=1)
b = np.cumsum(np.cumsum(np.random.randn(10,2), axis=0), axis=1)+6
lines1 = plt.plot(x,a, label="Label A", color="k")
lines2 = plt.plot(x,b, label="Label B", color="k", linestyle="--")
# either:
plt.legend(handles=(lines1[0], lines2[0]), labels=("Label A", "Label B"))
# or alternatively:
handles, labels = plt.gca().get_legend_handles_labels()
plt.legend(handles[::2], labels[::2])
plt.show()
答案 1 :(得分:0)
如果您删除
ax.legend(numpoints=1)
并添加
plt.legend(handles=[p1,p2], bbox_to_anchor=(0.75, 1), loc=2, borderaxespad=0.)
您只会得到一个图例。
所以您的代码看起来像
import matplotlib.pyplot as plt
import pandas as pd
#####read and organize data
alldata = pd.read_csv('Fig_1.csv')
CondtionA = list(zip(alldata.iloc[:,1],alldata.iloc[:,2]))
ConditionB = list(zip(alldata.iloc[:,7],alldata.iloc[:,8]))
### make the figure
fig, ax = plt.subplots()
p1 = plt.plot(alldata['Temperature'],ConditionA,linewidth = 1,c='k', linestyle = '--',label = 'ConditionA')
p2 = plt.plot(alldata['Temperature'],ConditionB,linewidth = 1,c='k', label = "ConditonB")
#ax.legend(numpoints=1)
plt.legend(handles=[p1,p2], bbox_to_anchor=(0.75, 1), loc=2, borderaxespad=0.)
plt.show()