J'essaie de faire deux ensembles de boîtes à moustaches en utilisant Matplotlib. Je veux que chaque ensemble de parcelles soit rempli (et les points et les moustaches) dans une couleur différente. Donc, fondamentalement, il y aura deux couleurs sur l'intrigue
Mon code est ci-dessous, ce serait génial si vous pouvez aider à rendre ces tracés en couleur. d0
et d1
sont chacune une liste de listes de données. Je veux que l'ensemble des boîtes à moustaches soit composé de données dans d0
en une seule couleur, et l'ensemble des boîtes à moustaches avec des données dans d1
dans une autre couleur.
plt.boxplot(d0, widths = 0.1)
plt.boxplot(d1, widths = 0.1)
Vous pouvez modifier la couleur d'un diagramme à l'aide de setp
sur la valeur renvoyée de boxplot()
comme suit:
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()
Pour coloriser le boxplot, vous devez d'abord utiliser le mot clé patch_artist=True
Pour lui dire que les cases sont des patchs et pas seulement des chemins. Ensuite, vous avez deux options principales ici:
...props
, par exemple.boxprops=dict(facecolor="red")
. Pour tous les arguments de mots clés, reportez-vous à la documentationplt.setp(item, properties)
pour définir les propriétés des boîtes, des moustaches, des dépliants, des médianes, des bouchons.item.set_<property>(...)
sur eux individuellement. Cette option est détaillée dans une réponse à la question suivante: boxplots remplis par python matplotlib , où elle permet de changer la couleur des cases individuelles séparément.L'exemple complet, montrant les options 1 et 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()
Cette question semble être similaire à celle-là ( motif de visage pour les boîtes dans les boîtes à moustaches ) J'espère que ce code résout votre problème
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()
import numpy as np
import matplotlib.pyplot as plt
#generate some random data
data = np.random.randn(200)
d= [data, data]
#plot
box = plt.boxplot(d, showfliers=False)
# change the color of its elements
for _, line_list in box.items():
for line in line_list:
line.set_color('r')
plt.show()