tiempo real matrices leyenda gráfico graficos graficar grafica con como barras python matplotlib legend seaborn

real - leyenda grafica python



Gráfica de caja marítima+gráfica de franjas: leyenda duplicada (2)

Puede obtener los identificadores / etiquetas que deben existir en la leyenda antes de dibujar la leyenda. A continuación, dibuja la leyenda sólo con los específicos que desee.

import matplotlib.pyplot as plt import seaborn as sns import pandas as pd tips = sns.load_dataset("tips") sns.stripplot(x="day", y="total_bill", hue="smoker", data=tips, jitter=True, palette="Set2", split=True,linewidth=1,edgecolor=''gray'') # Get the ax object to use later. ax = sns.boxplot(x="day", y="total_bill", hue="smoker", data=tips,palette="Set2",fliersize=0) # Get the handles and labels. For this example it''ll be 2 tuples # of length 4 each. handles, labels = ax.get_legend_handles_labels() # When creating the legend, only use the first two elements # to effectively remove the last two. l = plt.legend(handles[0:2], labels[0:2], bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)

Una de las cosas más seaborn que puede hacer fácilmente en el seaborn es la combinación boxplot + stripplot :

import matplotlib.pyplot as plt import seaborn as sns import pandas as pd tips = sns.load_dataset("tips") sns.stripplot(x="day", y="total_bill", hue="smoker", data=tips, jitter=True, palette="Set2", split=True,linewidth=1,edgecolor=''gray'') sns.boxplot(x="day", y="total_bill", hue="smoker", data=tips,palette="Set2",fliersize=0) plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.);

Desafortunadamente, como se puede ver arriba, produjo una doble leyenda, una para la gráfica de caja, otra para la gráfica de franjas. Obviamente, parece ridículo y redundante. Pero parece que no puedo encontrar una manera de deshacerme de la leyenda de stripplot y solo dejar la leyenda de boxplot . Probablemente, de alguna manera puedo eliminar elementos de plt.legend , pero no puedo encontrarlo en la documentación.


Quiero agregar que si usa subparcelas, el manejo de la leyenda podría ser un poco más problemático. Por cierto, el código anterior, que da una figura muy agradable (@Sergey Antopolskiy y @Ffisegydd), no reubicará la leyenda en una trama secundaria, que sigue apareciendo de forma muy obstinada. Ver código de arriba adaptado a subplots:

import matplotlib.pyplot as plt import seaborn as sns import pandas as pd tips = sns.load_dataset("tips") fig, axes = sns.plt.subplots(2,2) sns.stripplot(x="day", y="total_bill", hue="smoker", data=tips, jitter=True, palette="Set2", split=True,linewidth=1,edgecolor=''gray'', ax = axes[0,0]) ax = sns.boxplot(x="day", y="total_bill", hue="smoker", data=tips,palette="Set2",fliersize=0, ax = axes[0,0]) handles, labels = ax.get_legend_handles_labels() l = plt.legend(handles[0:2], labels[0:2], bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)

La leyenda original permanece. Para borrarlo puedes añadir esta línea:

axes[0,0].legend(handles[:0], labels[:0])