2012-04-11 7 views
24

Para una gráfica simple a continuación, ¿hay alguna manera de hacer que matplotlib complete la leyenda para que llene las filas de izquierda a derecha, en lugar de primera columna y segunda columna?Leyenda de Matplotlib, agregue elementos en columnas en lugar de hacia abajo

>>> 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

Respuesta

20

me ocurre una forma posible. Puedes order your legend items como quieras. Todo lo que necesita hacer es cambiar el orden para que le dé el resultado que desea.

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

Cuestiones relacionadas