2012-04-11 6 views
24

Für ein einfaches Diagramm unten gibt es eine Möglichkeit, Matplotlib die Legende füllen zu lassen, so dass es die Zeilen von links nach rechts füllt, statt der ersten Spalte dann der zweiten Spalte?Matplotlib-Legende, Elemente über Spalten statt nach unten hinzufügen

>>> from pylab import * 
>>> x = arange(-2*pi, 2*pi, 0.1) 
>>> plot(x, sin(x), label='Sine') 
>>> plot(x, cos(x), label='Cosine') 
>>> plot(x, arctan(x), label='Inverse tan') 
>>> legend(loc=9,ncol=2) 
>>> grid('on') 

enter image description here

Antwort

20

Ich denke an eine mögliche Art und Weise können. Sie können order your legend items wie Sie möchten. Alles, was Sie tun müssen, ist, die Reihenfolge so zu ändern, dass Sie das gewünschte Ergebnis erhalten.

import matplotlib.pyplot as plt 
import numpy as np 
import itertools 

def flip(items, ncol): 
    return itertools.chain(*[items[i::ncol] for i in range(ncol)]) 

x = np.arange(-2*np.pi, 2*np.pi, 0.1) 
ax = plt.subplot(111) 
ax.plot(x, np.sin(x), label='Sine') 
ax.plot(x, np.cos(x), label='Cosine') 
ax.plot(x, np.arctan(x), label='Inverse tan') 

handles, labels = ax.get_legend_handles_labels() 
plt.legend(flip(handles, 2), flip(labels, 2), loc=9, ncol=2) 

plt.grid('on') 
plt.show() 

enter image description here

Verwandte Themen