matplotlib – haciendo tags para plots de violín

Normalmente hago tags para barras de la siguiente manera usando el parámetro ‘etiqueta’ en el método ‘barra’.

axes[0].bar(x, y, bar_width, label='abc') axes[0].legend() 

Ahora me gustaría trazar plots de violín y hacer una etiqueta para cada colección de la siguiente manera, pero no funciona ya que ‘violinplot’ no tiene el parámetro ‘etiqueta’.

 axes[0].violinplot(data1, label='abc1') axes[1].violinplot(data2, label='abc2') 

¿Puede alguien ayudarme a hacer una etiqueta para cada colección?

Como se mencionó en el comentario, algunas plots en matplotlib no admiten leyendas. La documentación aún proporciona una forma sencilla de agregar leyendas personalizadas para ellos: http://matplotlib.org/users/legend_guide.html#proxy-legend-handles

Idea principal: agregue objetos ‘falsos’, que no se pueden mostrar en el gráfico, luego utilícelos para formar una lista de manejadores para el método de leyenda.

  import random import numpy as np import matplotlib.pyplot as pl import matplotlib.patches as mpatches from itertools import repeat red_patch = mpatches.Patch(color='red') # 'fake' invisible object pos = [1, 2, 4, 5, 7, 8] label = ['plot 1','plot2','ghi','jkl','mno','pqr'] data = [np.random.normal(size=100) for i in pos] fake_handles = repeat(red_patch, len(pos)) pl.figure() ax = pl.subplot(111) pl.violinplot(data, pos, vert=False) ax.legend(fake_handles, label) pl.show() 

Violinplot con leyenda personalizada

edit: lo siento, ahora veo que querías agregar una leyenda, no tags de ejes …

Puede establecer manualmente las ubicaciones de marca y luego sobrescribir sus tags:

 import numpy as np import matplotlib.pyplot as pl pos = [1, 2, 4, 5, 7, 8] label = ['abc','def','ghi','jkl','mno','pqr'] data = [np.random.normal(size=100) for i in pos] pl.figure() ax = pl.subplot(111) pl.violinplot(data, pos, vert=False) ax.set_yticks(pos) ax.set_yticklabels(label) 

introduzca la descripción de la imagen aquí