Python Matplotlib Boxplot Color

Estoy tratando de hacer dos conjuntos de diagtwigs de caja utilizando Matplotlib. Quiero que se rellene cada conjunto de diagtwigs de caja (y puntos y bigotes) en un color diferente. Así que básicamente habrá dos colores en la ttwig.

Mi código está debajo, sería genial si pudieras ayudar a hacer estas plots en color. d0 y d1 son cada una de las listas de listas de datos. Quiero que el conjunto de diagtwigs de caja se realice con datos en d0 en un color, y el conjunto de diagtwigs de caja con datos en d1 en otro color.

 plt.boxplot(d0, widths = 0.1) plt.boxplot(d1, widths = 0.1) 

Puede cambiar el color de un diagtwig de caja usando setp en el valor devuelto desde boxplot() siguiente manera:

 import matplotlib.pyplot as plt def draw_plot(data, edge_color, fill_color): bp = ax.boxplot(data, patch_artist=True) for element in ['boxes', 'whiskers', 'fliers', 'means', 'medians', 'caps']: plt.setp(bp[element], color=edge_color) for patch in bp['boxes']: patch.set(facecolor=fill_color) example_data1 = [[1,2,0.8], [0.5,2,2], [3,2,1]] example_data2 = [[5,3, 4], [6,4,3,8], [6,4,9]] fig, ax = plt.subplots() draw_plot(example_data1, 'red', 'tan') draw_plot(example_data2, 'blue', 'cyan') ax.set_ylim(0, 10) plt.show() 

Esto se mostraría de la siguiente manera: Demostración de cuadro de caja

Para colorear el diagtwig de caja, primero debe usar la palabra clave patch_artist=True para decirle que las cajas son parches y no solo rutas. Entonces tienes dos opciones principales aquí:

  1. establecer el color a través de ...props argumento de palabra clave, por ejemplo
    boxprops=dict(facecolor="red") . Para todos los argumentos de palabras clave, consulte la documentación
  2. Utilice la funcionalidad plt.setp(item, properties) para configurar las propiedades de las cajas, bigotes, volantes, medianas, gorras.
  3. obtenga los elementos individuales de las cajas del diccionario devuelto y use item.set_(...) en ellos individualmente. Esta opción se detalla en una respuesta a la siguiente pregunta: diagtwigs de caja rellenos de python matplotlib , donde permite cambiar el color de las cajas individuales por separado.

El ejemplo completo, mostrando las opciones 1 y 2:

 import matplotlib.pyplot as plt import numpy as np data = np.random.normal(0.1, size=(100,6)) data[76:79,:] = np.ones((3,6))+0.2 plt.figure(figsize=(4,3)) # option 1, specify props dictionaries c = "red" plt.boxplot(data[:,:3], positions=[1,2,3], notch=True, patch_artist=True, boxprops=dict(facecolor=c, color=c), capprops=dict(color=c), whiskerprops=dict(color=c), flierprops=dict(color=c, markeredgecolor=c), medianprops=dict(color=c), ) # option 2, set all colors individually c2 = "purple" box1 = plt.boxplot(data[:,::-2]+1, positions=[1.5,2.5,3.5], notch=True, patch_artist=True) for item in ['boxes', 'whiskers', 'fliers', 'medians', 'caps']: plt.setp(box1[item], color=c2) plt.setp(box1["boxes"], facecolor=c2) plt.setp(box1["fliers"], markeredgecolor=c2) plt.xlim(0.5,4) plt.xticks([1,2,3], [1,2,3]) plt.show() 

introduzca la descripción de la imagen aquí

Esta pregunta parece ser similar a esa ( Patrón de cara para cuadros en diagtwigs de caja ) Espero que este código resuelva su problema

 import matplotlib.pyplot as plt # fake data d0 = [[4.5, 5, 6, 4],[4.5, 5, 6, 4]] d1 = [[1, 2, 3, 3.3],[1, 2, 3, 3.3]] # basic plot bp0 = plt.boxplot(d0, patch_artist=True) bp1 = plt.boxplot(d1, patch_artist=True) for box in bp0['boxes']: # change outline color box.set(color='red', linewidth=2) # change fill color box.set(facecolor = 'green' ) # change hatch box.set(hatch = '/') for box in bp1['boxes']: box.set(color='blue', linewidth=5) box.set(facecolor = 'red' ) plt.show() 

introduzca la descripción de la imagen aquí