Je sais comment parcourir une liste de couleurs dans matplotlib. Mais est-il possible de faire quelque chose de similaire avec les styles de lignes (unies, en pointillés, en tirets, etc.) ? J'aurais besoin de faire cela pour que mes graphiques soient plus faciles à lire lorsqu'ils sont imprimés. Avez-vous des suggestions sur la manière de procéder ?
Réponses
Trop de publicités?Quelque chose comme ça pourrait faire l'affaire :
import matplotlib.pyplot as plt
from itertools import cycle
lines = ["-","--","-.",":"]
linecycler = cycle(lines)
plt.figure()
for i in range(10):
x = range(i,i+10)
plt.plot(range(10),x,next(linecycler))
plt.show()
Résultat :
Modifier pour une version plus récente (v2.22)
import matplotlib.pyplot as plt
from cycler import cycler
#
plt.figure()
for i in range(5):
x = range(i,i+5)
linestyle_cycler = cycler('linestyle',['-','--',':','-.'])
plt.rc('axes', prop_cycle=linestyle_cycler)
plt.plot(range(5),x)
plt.legend(['first','second','third','fourth','fifth'], loc='upper left', fancybox=True, shadow=True)
plt.show()
Pour des informations plus détaillées, consultez le Tutoriel matplotlib sur "Styling with cycler" (en anglais)
Pour voir le résultat, cliquez sur " montrer le chiffre "
La prochaine version de matplotlib v1.5 supprimera color_cycle au profit de la nouvelle fonctionnalité prop_cycler : http://matplotlib.org/devdocs/users/whats_new.html?highlight=prop_cycle#added-axes-prop-cycle-key-to-rcparams
plt.rcParams['axes.prop_cycle'] = ("cycler('color', 'rgb') +" "cycler('lw', [1, 2, 3])")
Ensuite, allez-y et créez vos axes et vos graphiques !
Si vous voulez que le changement soit automatique vous pouvez ajouter ces deux lignes dans les le fichier axes.py de matplotlib : Cherchez cette ligne :
self.color_cycle = itertools.cycle(clist)
et ajoutez la ligne suivante en dessous :
self.line_cycle = itertools.cycle(["-",":","--","-.",])
Et cherchez la ligne :
kw['color'] = self.color_cycle.next()
et ajoutez la ligne :
kw['linestyle'] = self.line_cycle.next()
Je suppose que vous pouvez faire la même chose pour le marqueur.
Voici quelques exemples d'utilisation des cyclistes pour développer des ensembles de styles
des cyclers peuvent être ajoutés pour donner des compositions (rouge avec '-', bleu avec '--', ...)
plt.rc('axes', prop_cycle=(cycler('color', list('rbgk')) +
cycler('linestyle', ['-', '--', ':', '-.'])))
utilisation directe sur les Axes :
ax1.set_prop_cycle(cycler('color', ['c', 'm', 'y', 'k']) +
cycler('lw', [1, 2, 3, 4]))
les cyclistes peuvent être multipliés ( http://matplotlib.org/cycler/ ) pour offrir un plus large éventail de styles uniques
for ax in axarr:
ax.set_prop_cycle(cycler('color', list('rbgykcm')) *
cycler('linestyle', ['-', '--']))
voir aussi : http://matplotlib.org/examples/color/color_cycle_demo.html
J'utilise généralement une combinaison de couleurs et de lignes de base pour représenter différents ensembles de données. Supposons que nous ayons 16 ensembles de données, chacun des quatre ensembles de données appartenant à un groupe (ayant une propriété en commun), il est facile de les visualiser lorsque nous représentons chaque groupe avec une couleur commune mais ses membres avec des styles de lignes différents.
import numpy as np
import matplotlib.pyplot as plt
models=['00','01', '02', '03', '04', '05', '06', '07', '08', '09', '10',\
'11', '12', '13', '14', '15', '16']
fig = plt.figure()
ax = fig.add_subplot(111)
x = np.linspace(-1,1,100)
y = np.sin(x)
clrs_list=['k','b','g','r'] # list of basic colors
styl_list=['-','--','-.',':'] # list of basic linestyles
for i in range(0,16):
clrr=clrs_list[i // 4]
styl=styl_list[i % 4]
modl=models[i+1]
frac=(i+1)/10.0
ax.plot(x,y+frac,label=modl,color=clrr,ls=styl)
plt.legend()
plt.show()
- Réponses précédentes
- Plus de réponses