J'écris un script qui fera du complot. Je veux qu'il trace plusieurs séries de données, chacune avec son style de trait unique (pas de couleur). Je peux facilement parcourir une liste, mais une telle liste est-elle déjà disponible en python?
Selon le doc vous pourriez les trouver en faisant ceci:
from matplotlib import lines
lines.lineStyles.keys()
>>> ['', ' ', 'None', '--', '-.', '-', ':']
Vous pouvez faire la même chose avec marqueurs
EDIT: Dans les dernières versions , il existe toujours les mêmes styles, mais vous pouvez faire varier l’espace entre les points/lignes.
plot
documentation
http://matplotlib.org/1.5.3/api/pyplot_api.html#matplotlib.pyplot.plot a une liste de styles de ligne + marqueur:
character description
'-' solid line style
'--' dashed line style
'-.' dash-dot line style
':' dotted line style
'.' point marker
',' pixel marker
'o' circle marker
'v' triangle_down marker
'^' triangle_up marker
'<' triangle_left marker
'>' triangle_right marker
'1' tri_down marker
'2' tri_up marker
'3' tri_left marker
'4' tri_right marker
's' square marker
'p' pentagon marker
'*' star marker
'h' hexagon1 marker
'H' hexagon2 marker
'+' plus marker
'x' x marker
'D' diamond marker
'd' thin_diamond marker
'|' vline marker
'_' hline marker
Comme cela fait partie de la docstring pyplot.plot
, vous pouvez aussi le voir depuis le terminal avec:
import matplotlib.pyplot as plt
help(plt.plot)
D'après mon expérience, il est agréable d'avoir les couleurs et les marqueurs dans une liste afin que je puisse les parcourir lors du traçage.
Voici comment j'obtiens la liste de ces choses. Il a fallu creuser.
import matplotlib
colors_array = matplotlib.colors.cnames.keys()
markers_array = matplotlib.markers.MarkerStyle.markers.keys()
En python3, la méthode .keys()
renvoie un objet dict_keys
et non une list
. Vous devez transmettre les résultats à list()
pour pouvoir indexer le tableau comme vous le pouviez dans python2. par exemple. cette SO question
Vous pouvez donc utiliser quelque chose comme: pour créer des tableaux itératifs de lignes, de couleurs et de marqueurs.
import matplotlib
colors_array = list(matplotlib.colors.cnames.keys())
lines_array = list(matplotlib.lines.lineStyles.keys())
markers_array = list(matplotlib.markers.MarkerStyle.markers.keys())
Vous pouvez copier le dictionnaire à partir de l'exemple de style de ligne :
from collections import OrderedDict
linestyles = OrderedDict(
[('solid', (0, ())),
('loosely dotted', (0, (1, 10))),
('dotted', (0, (1, 5))),
('densely dotted', (0, (1, 1))),
('loosely dashed', (0, (5, 10))),
('dashed', (0, (5, 5))),
('densely dashed', (0, (5, 1))),
('loosely dashdotted', (0, (3, 10, 1, 10))),
('dashdotted', (0, (3, 5, 1, 5))),
('densely dashdotted', (0, (3, 1, 1, 1))),
('loosely dashdotdotted', (0, (3, 10, 1, 10, 1, 10))),
('dashdotdotted', (0, (3, 5, 1, 5, 1, 5))),
('densely dashdotdotted', (0, (3, 1, 1, 1, 1, 1)))])
Vous pouvez ensuite parcourir les styles de lignes
fig, ax = plt.subplots()
X, Y = np.linspace(0, 100, 10), np.zeros(10)
for i, (name, linestyle) in enumerate(linestyles.items()):
ax.plot(X, Y+i, linestyle=linestyle, linewidth=1.5, color='black')
ax.set_ylim(-0.5, len(linestyles)-0.5)
plt.show()
Ou vous venez de prendre un style de ligne unique de ceux-ci,
ax.plot([0,100], [0,1], linestyle=linestyles['loosely dashdotdotted'])