2017-06-01 78 views

回答

1

你当然会从matplotlib legend guide开始;更具体地在关于implementing a custom handler的部分。

阅读定制的传说其他一些问题,如

也可能有所帮助。

这里你想在图例中放置两个矩形。因此,在自定义Handler类中,您可以创建这些类并将它们添加到handlebox

import matplotlib.pyplot as plt 

class Handler(object): 
    def __init__(self, color): 
     self.color=color 
    def legend_artist(self, legend, orig_handle, fontsize, handlebox): 
     x0, y0 = handlebox.xdescent, handlebox.ydescent 
     width, height = handlebox.width, handlebox.height 
     patch = plt.Rectangle([x0, y0], width, height, facecolor='blue', 
            edgecolor='k', transform=handlebox.get_transform()) 
     patch2 = plt.Rectangle([x0+width/2., y0], width/2., height, facecolor=self.color, 
            edgecolor='k', transform=handlebox.get_transform()) 
     handlebox.add_artist(patch) 
     handlebox.add_artist(patch2) 
     return patch 


plt.gca() 

handles = [plt.Rectangle((0,0),1,1) for i in range(4)] 
colors = ["limegreen", "red", "gold", "blue"] 
hmap = dict(zip(handles, [Handler(color) for color in colors])) 

plt.legend(handles=handles, labels=colors, handler_map=hmap) 

plt.show() 

two rectangles in custom legend