La soluzione che propongo è quello di combinare due diversi proxy-artists per una leggenda ingresso, come descritto qui: Combine two Pyplot patches for legend.
La strategia è quindi di impostare la fillstyle
del primo marcatore piazza per left
mentre l'altro è impostato su right
(vedi http://matplotlib.org/1.3.0/examples/pylab_examples/filledmarker_demo.html). Due colori diversi possono quindi essere attribuiti a ciascun marcatore per produrre la voce della legenda dei due colori desiderata.
Il codice seguente mostra come questo può essere fatto. Si noti che l'argomento in plt.legend
è importante per visualizzare solo un marcatore per ciascuna voce.
import matplotlib.pyplot as plt
plt.close('all')
#---- Generate a Figure ----
fig = plt.figure(figsize=(4, 4))
ax = fig.add_axes([0.15, 0.15, 0.75, 0.75])
ax.axis([0, 1, 0, 1])
#---- Define First Legend Entry ----
m1, = ax.plot([], [], c='red' , marker='s', markersize=20,
fillstyle='left', linestyle='none')
m2, = ax.plot([], [], c='blue' , marker='s', markersize=20,
fillstyle='right', linestyle='none')
#---- Define Second Legend Entry ----
m3, = ax.plot([], [], c='cyan' , marker='s', markersize=20,
fillstyle='left', linestyle='none')
m4, = ax.plot([], [], c='magenta' , marker='s', markersize=20,
fillstyle='right', linestyle='none')
#---- Plot Legend ----
ax.legend(((m2, m1), (m3, m4)), ('Foo', 'Foo2'), numpoints=1, labelspacing=2,
loc='center', fontsize=16)
plt.show(block=False)
che si traduce in:
responsabilità: questo funziona solo per una voce di legenda a due colori. Se si desidera più di due colori, non riesco a pensare ad altro modo per farlo a parte l'approccio descritto da @jwinterm (Python Matplotlib Multi-color Legend Entry)