Alinear horizontalmente las leyendas del diagtwig de barras en python

Hice un gráfico de varios ejes con el siguiente código y no puedo organizar la leyenda como quiero. El código de mi gráfica es el siguiente:

import matplotlib.pyplot as plt import numpy as np x = np.arange(4) y = [5, 7, 4, 9] z = [9, 3, 5, 6] r = [30, 40, 45, 37] fig,ax = plt.subplots() abc = ax.bar(x,y,0.25 ) cde = ax.bar(x+0.25,z,0.25) ax.legend((abc[0], cde[0]), ('y', 'z'),bbox_to_anchor=(0., 1.02, 1, .102) , borderaxespad=0.) ax.set_xticks(x + 0.25 / 2) ax.set_xticklabels(('A', 'B', 'C', 'D')) ax2 = ax.twinx() efg = ax2.plot(x+0.25/2,r,color = 'black',label = "r") ax2.legend(bbox_to_anchor=(0.11,1.07) , borderaxespad=0.) plt.show() 

La gráfica que muestra es así. introduzca la descripción de la imagen aquí .

La leyenda en el lado superior derecho está alineada verticalmente pero quiero que estén alineadas horizontalmente. No pude encontrar ninguna documentación sobre esto. Quiero que sean como se muestra en la siguiente figura. introduzca la descripción de la imagen aquí

Gracias

ncol usar el argumento ncol , que establece el número de columnas a usar en la leyenda , por ejemplo, ncol=2 le daría dos columnas.

 ax.legend(..., ncol=2) 

Luego puede ver cómo ubicar la leyenda usando el argumento loc junto con bbox_to_anchor , para encontrar parámetros sensibles y hacer que ambas leyendas se alineen entre sí:

 import matplotlib.pyplot as plt import numpy as np x = np.arange(4) y = [5, 7, 4, 9] z = [9, 3, 5, 6] r = [30, 40, 45, 37] fig,ax = plt.subplots() abc = ax.bar(x,y,0.25 ) cde = ax.bar(x+0.25,z,0.25) ax.legend((abc[0], cde[0]), ('y', 'z'),loc="lower right", bbox_to_anchor=(1., 1.02) , borderaxespad=0., ncol=2) ax.set_xticks(x + 0.25 / 2) ax.set_xticklabels(('A', 'B', 'C', 'D')) ax2 = ax.twinx() efg = ax2.plot(x+0.25/2,r,color = 'black',label = "r") ax2.legend(bbox_to_anchor=(0,1.02),loc="lower left", borderaxespad=0.) plt.show() 

introduzca la descripción de la imagen aquí