Estoy tratando de hacer dos conjuntos de diagramas de caja usando Matplotlib. Quiero que cada conjunto de diagramas de caja se llene (y puntos y bigotes) en un color diferente. Así que básicamente habrá dos colores en la trama.
Mi código está debajo, sería genial si pudieras ayudar a hacer estos gráficos en color. d0
y d1
son cada una lista de listas de datos. Quiero el conjunto de diagramas de caja hechos con datos en d0
en un color y el conjunto de diagramas de caja con datos en d1
en otro color.
plt.boxplot(d0, widths = 0.1) plt.boxplot(d1, widths = 0.1)
Para colorear el diagrama 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í:
...props
, por ejemploboxprops=dict(facecolor="red")
. Para todos los argumentos de palabras clave, consulte la documentaciónplt.setp(item, properties)
para establecer las propiedades de las cajas, bigotes, volantes, medianas, tapas.item.set_<property>(...)
en ellos individualmente. Esta opción se detalla en una respuesta a la siguiente pregunta: python matplotlibfilled boxplots , 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()
Puede cambiar el color de un diagrama de caja usando setp
en el valor devuelto de boxplot()
. Este ejemplo define una función box_plot()
que permite especificar los colores de borde y relleno:
import matplotlib.pyplot as plt def box_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) return bp 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() bp1 = box_plot(example_data1, 'red', 'tan') bp2 = box_plot(example_data2, 'blue', 'cyan') ax.legend([bp1["boxes"][0], bp2["boxes"][0]], ['Data 1', 'Data 2']) ax.set_ylim(0, 10) plt.show()
Esto se mostraría de la siguiente manera:
Esta pregunta parece ser similar a esa ( Patrón de cara para cajas en diagramas 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()