Tweaking seaborn.boxplot

Me gustaría comparar un conjunto de distribuciones de puntajes ( score ), agrupadas por algunas categorías ( centrality ) y coloreadas por otras ( model ). He intentado lo siguiente con el mar:

 plt.figure(figsize=(14,6)) seaborn.boxplot(x="centrality", y="score", hue="model", data=data, palette=seaborn.color_palette("husl", len(models) +1)) seaborn.despine(offset=10, trim=True) plt.savefig("/home/i11/staudt/Eval/properties-replication-test.pdf", bbox_inches="tight") 

Hay algunos problemas que tengo con esta ttwig:

  • Hay una gran cantidad de valores atípicos y no me gusta cómo se dibujan aquí. ¿Puedo eliminarlos? ¿Puedo cambiar la apariencia para mostrar menos desorden? ¿Puedo colorearlos al menos para que su color coincida con el color de la caja?
  • El valor original model es especial porque todas las demás distribuciones deben compararse con la distribución del original . Esto debe ser reflejado visualmente en la ttwig. ¿Puedo hacer original la primera caja de cada grupo? ¿Puedo compensarlo o marcarlo de alguna manera? ¿Sería posible trazar una línea horizontal a través de la mediana de cada distribución original y a través del grupo de cuadros?
  • Algunos de los valores de score son muy pequeños, ¿cómo hacer una escala adecuada del eje y para mostrarlos?

introduzca la descripción de la imagen aquí

EDITAR:

Aquí hay un ejemplo con un eje y escalado de registro, que aún no es ideal. ¿Por qué algunas cajas parecen cortadas en el extremo inferior?

introduzca la descripción de la imagen aquí

Visualización de valores atípicos

Debería poder pasar cualquier argumento a seaborn.boxplot que puede pasar a plt.boxplot (consulte la documentación ), de modo que pueda ajustar la visualización de los valores atípicos configurando flierprops . Aquí hay algunos ejemplos de lo que puede hacer con sus valores atípicos.

Si no quieres mostrarlos, podrías hacerlo.

 seaborn.boxplot(x="centrality", y="score", hue="model", data=data, showfliers=False) 

O podrías hacerlos de color gris claro así:

 flierprops = dict(markerfacecolor='0.75', markersize=5, linestyle='none') seaborn.boxplot(x="centrality", y="score", hue="model", data=data, flierprops=flierprops) 

Orden de grupos

Puede establecer el orden de los grupos manualmente con hue_order , por ejemplo,

 seaborn.boxplot(x="centrality", y="score", hue="model", data=data, hue_order=["original", "Havel..","etc"]) 

Escalado del eje y

¿Podría simplemente obtener los valores mínimo y máximo de todos los valores de y y establecer y_lim consecuencia? Algo como esto:

 y_values = data["scores"].values seaborn.boxplot(x="centrality", y="score", hue="model", data=data, y_lim=(np.min(y_values),np.max(y_values))) 

EDITAR: Este último punto realmente no tiene sentido ya que el rango automático y_lim ya incluirá todos los valores, pero lo dejo solo como un ejemplo de cómo ajustar estas configuraciones. Como se mencionó en los comentarios, la escala de registros probablemente tenga más sentido.