> Modules non standards > Matplotlib > Boxplot
Boxplot
boxplot (ou boîte à moustache) :
- pyplot.boxplot([[1, 2, 3, 4, 5], [7, 5, 8, 4, 9, 5, 7]]) : boxplot simple, où l'on donne une séquence de séquence (par exemple, liste de listes), toutes n'ayant pas forcément la même taille.
- on peut aussi donner une array 2d, auquel cas chaque colonne est un groupe : pyplot.boxplot(numpy.array([[1, 2, 3], [2, 7, 8], [1, 3, 10], [2, 5, 12]]))
- si on part d'un dictionnaire, il suffit de faire : d = {'a': [1, 4, 6, 3], 'b': [7, 9, 12, 8], 'c': [1, 7]}; pyplot.boxplot([d[x] for x in d.keys()], labels = d.keys())
- la boîte donne les limites du premier et dernier quartile, la barre du milieu donne la médiane, les moustaches vont jusqu'à la valeur la plus extrème dans la limite de 1.5 fois la hauteur de la boîte, et les points au-delà des moustaches sont représentés par des points isolés.
Exemple :
import numpy
pyplot.subplot(121)
pyplot.boxplot([[1, 2, 3, 4, 5, 13], [6, 7, 8, 10, 10, 11, 12], [1, 2, 3]])
pyplot.ylim(0, 14)
pyplot.title('boxplot avec sequence')
pyplot.subplot(122)
pyplot.boxplot(numpy.array([[1, 2, 3], [2, 7, 8], [1, 3, 10], [2, 5, 12]]))
pyplot.ylim(0, 14)
pyplot.title('boxplot avec array 2d')
Paramètres simples de boxplot :
- pour avoir des boîtes remplies avec une couleur, utiliser des patchs plutôt que des lignes, et ensuite fixer leur couleur :
bp = pyplot.boxplot([[1, 2, 3, 4, 5, 13], [6, 7, 8, 10, 10, 11, 12], [1, 2, 3]], patch_artist = True)
for patch in bp['boxes']:
patch.set_color('skyblue')
patch.set_edgecolor('blue')
- en fait, boxplot renvoie un dictionnaire qui a les clefs : 'boxes', 'fliers', 'medians', 'means', 'whiskers', 'caps' (pour customiser chaque objet graphique).
- sym = 'b+' : couleur et symbole utilisés pour les outliers (points au-delà des moustaches).
- vert = 0 : pour avoir un boxplot horizontal.
- whis = 2 : moustaches s'étendent jusqu'au point le plus extrème dans 2 fois la distance interquartile (défaut = 1.5)
- widths = [1, 0.5, 0.2] : les largeurs des boîtes si on les veut de largeur variable. Une taille de 1 correspond à aucun espace laissé entre les boîtes.
- positions = [1, 3, 4] : position des boîtes si on ne les veut pas espacées régulièrement.
- on ne peut pas configurer simplement le style des boîtes ! (mais voir ci-dessous pour une configuration complète plus compliquée).
- fixation des étiquettes de l'axe : à la main, avec Axis, pas à travers de boxplot : axes.xaxis.set_ticklabels(['A', 'B', 'C']) (voir code ci-dessous pour un exemple).
Configuration complète des boxplots :
- boxplot renvoie en fait un dictionnaire dont les clefs sont 'medians', 'fliers', 'whiskers', 'boxes', 'caps' et les valeurs sont les listes d'artists correspondants (par exemple, pour 'medians', la liste des objets Line2D correspondant). On peut donc accéder à ces objets pour complètement les configurer !
- medians : traits médians, whiskers : moustaches verticales, caps : traits horizontaux à l'extrémité des moustaches, boxes : boîtes.
- attention : donner le paramètre patch_artist = True à la fonction boxplot pour avoir des boîtes qui soient des PathPatch plutôt que des Line2D, sinon, on ne peut pas les remplir avec une couleur !
- par défaut, les moustaches s'étende de 1.5 fois la distance interquartile, mais on peut le changer :
- boxplot(..., whis = 'range') : moustaches étendues jusqu'aux valeurs minimum et maximum.
- boxplot(..., whis = 0) : pas de moustaches.
Exemple avec un boxplot configuré :
boxplotElements = pyplot.boxplot([[1, 2, 3, 4, 5, 13],
[6, 7, 8, 10, 10, 11, 12],
[1, 2, 3]], sym = 'g*', whis = 1.2,
widths = [1, 0.5, 0.2], positions = [1, 3, 4],
patch_artist = True)
pyplot.gca().xaxis.set_ticklabels(['A', 'B', 'C'])
for element in boxplotElements['medians']:
element.set_color('blue')
element.set_linewidth(4)
for element in boxplotElements['boxes']:
element.set_edgecolor('magenta')
element.set_facecolor('yellow')
element.set_linewidth(3)
element.set_linestyle('dashed')
element.set_fill(True)
element.set_hatch('/')
for element in boxplotElements['whiskers']:
element.set_color('red')
element.set_linewidth(2)
for element in boxplotElements['caps']:
element.set_color('cyan')
pyplot.ylim(0, 14)
pyplot.title('boxplot avec configuration complete')
Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert