将两个图例标签放在一个图中的不同位置

时间:2017-03-18 18:56:51

标签: python matplotlib label

我在一个图中有三个图表彼此合并,其中包含许多值得注意的信息。我最近能够对图例标签进行颜色编码,而不是用相关的线标记它们。

enter image description here

但是当我尝试在其中一个地块上的另一个位置添加另一组标签时,原始消失

import matplotlib.pyplot as plt
from matplotlib import gridspec
import numpy as np
import scipy as sp
import matplotlib.ticker as tic
from matplotlib.patches import Rectangle

fig111 = plt.figure(figsize=(12,6))
gs = gridspec.GridSpec(1,3, width_ratios=[1,1,0.3]) 
Bind = fig111.add_subplot(gs[0])
BindD = fig111.add_subplot(gs[1], sharey=Bind)
Hist = fig111.add_subplot(gs[2], sharey=BindD)

...
...

empty = Rectangle((0, 0), 0, 0, alpha=0.0)

l = Bind.legend([empty], ['Illustris-1'], 
      loc='upper left', frameon=False, handlelength=0, handletextpad=0)
lD = BindD.legend([empty], ['Illustris-1-Dark'], 
        loc='upper left', frameon=False, handlelength=0, 
handletextpad=0)

dw = Bind.legend([empty,empty,empty,empty], ['Carina', 'Sculptor', 'Ursa Minor', 'Leo I' ], 
       loc='center right', frameon=False, handlelength=0, handletextpad=0)

l.get_texts()[0].set_color('slateblue')
lD.get_texts()[0].set_color('crimson')

dw.get_texts()[0].set_color('mediumspringgreen')
dw.get_texts()[1].set_color('orchid')
dw.get_texts()[2].set_color('c')
dw.get_texts()[3].set_color('orange')

gs.update(wspace=0)
plt.setp([BindD.get_yticklabels() ,Hist.get_yticklabels()], visible=False)

plt.show()

enter image description here

在同一个子图上同时使用两个标签的有效方法是什么?

1 个答案:

答案 0 :(得分:1)

从matplotlib图例指南的Multiple legends on the same axes章节中可以看出,您需要在创建第二个图例之前将第一个图例作为艺术家添加到轴

legend = Bind.legend(...)
Bind.add_artist(legend)
Bind.legend(...)