我正在使用matlibplot,我想手动向图例中添加颜色和标签的项目。我正在将数据添加到图中以指定会导致大量重复。
我的想法是:
\path\to\test
其中self.labels是我想要的传奇标签的项目数量,它采用大颜色列表的子集。但是,当我运行它时,这没有任何结果。
我错过了什么吗?
由于
答案 0 :(得分:36)
您检查了Legend Guide吗?
为了实用,我引用guide中的例子。
并非所有句柄都可以自动转换为图例条目,所以它 通常需要创造一个可以的艺术家。传奇手柄没有 必须存在于图或轴上以便使用。
假设我们想要创建一个包含某些数据条目的图例 用红色表示:
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
red_patch = mpatches.Patch(color='red', label='The red data')
plt.legend(handles=[red_patch])
plt.show()
修改强>
要添加两个补丁,您可以执行此操作:
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
red_patch = mpatches.Patch(color='red', label='The red data')
blue_patch = mpatches.Patch(color='blue', label='The blue data')
plt.legend(handles=[red_patch, blue_patch])
答案 1 :(得分:11)
我正在添加一些代码,以构建https://stackoverflow.com/users/2029132/gabra的答案和https://stackoverflow.com/users/5946578/brady-forcier的评论。在这里,我手动将元素添加到图例通过 a'for'循环。
首先,我创建一个包含我的图例名称和所需颜色的字典。我实际上在加载数据时这样做,但在这里我只是明确定义:
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
legend_dict = { 'data1' : 'green', 'data2' : 'red', 'data3' : 'blue' }
然后我循环遍历字典,并为每个条目定义一个补丁并附加到列表'patchList'。然后,我使用此列表创建我的传奇。
patchList = []
for key in legend_dict:
data_key = mpatches.Patch(color=legend_dict[key], label=key)
patchList.append(data_key)
plt.legend(handles=patchList)
plt.savefig('legend.png', bbox_inches='tight')
我并不担心特定顺序的图例条目,但您可以通过
来实现这一点。plt.legend(handles=sorted(patchList))
这是我的第一个回答,所以请提前为任何错误/失礼道歉。
答案 2 :(得分:4)
这是一个解决方案,可让您控制图例行的宽度和样式(在a lot of other things中)。
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
colors = ['black', 'red', 'green']
lines = [Line2D([0], [0], color=c, linewidth=3, linestyle='--') for c in colors]
labels = ['black data', 'red data', 'green data']
plt.legend(lines, labels)
plt.show()
有关更多选项,请查看此matplotlib gallery sample。
答案 3 :(得分:1)
对于那些希望将手动图例项添加到具有自动生成的项的单个/通用图例中的人:
# where some data has already been plotted to ax
handles, labels = ax.get_legend_handles_labels()
# manually define a new patch
patch = mpatches.Patch(color='grey', label='Manual Label')
# handles is a list, so append manual patch
handles.append(patch)
# plot the legend
plt.legend(handles=handles, loc='upper center')