问题 - 3D 阵列
问题:2012 年 11 月, 2013 年10 月
import numpy as np
a = np.random.random((2, 100, 4))
b = np.random.random((2, 100, 4))
c = np.random.random((2, 100, 4))
解决方案 - dict 唯一性
对于我的情况_nolegend_
(bli和DSM)不起作用,也不会label if i==0
。 ecatmur的答案使用get_legend_handles_labels
并减少了传说collections.OrderedDict
。 Fons演示了这在没有导入的情况下是可能的。
根据这些答案,我建议使用dict
独特的标签。
# Step-by-step
ax = plt.gca() # Get the axes you need
a = ax.get_legend_handles_labels() # a = [(h1 ... h2) (l1 ... l2)] non unique
b = {l:h for h,l in zip(*a)} # b = {l1:h1, l2:h2} unique
c = [*zip(*b.items())] # c = [(l1 l2) (h1 h2)]
d = c[::-1] # d = [(h1 h2) (l1 l2)]
plt.legend(*d)
或者
plt.legend(*[*zip(*{l:h for h,l in zip(*ax.get_legend_handles_labels())}.items())][::-1])
可能不如Matthew Bourque的解决方案清晰易记。 代码高尔夫欢迎。
例子
import numpy as np
a = np.random.random((2, 100, 4))
b = np.random.random((2, 100, 4))
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1)
ax.plot(*a, 'C0', label='a')
ax.plot(*b, 'C1', label='b')
ax.legend(*[*zip(*{l:h for h,l in zip(*ax.get_legend_handles_labels())}.items())][::-1])
# ax.legend() # Old, ^ New
plt.show()