70 votes

Puis-je parcourir les styles de lignes dans matplotlib ?

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 ?

97voto

Avaris Points 11815

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 : enter image description here

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 "

25voto

Ben Root Points 143

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 !

10voto

JMA Points 71

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.

10voto

Ziggy Eunicien Points 1155

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

4voto

srinivasu u Points 368

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()

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X