¿Hay una lista de estilos de línea en matplotlib?

Estoy escribiendo un guión que hará algunas ttwigs. Quiero que trace varias series de datos, cada una con su estilo de línea único (no color). Puedo iterar fácilmente a través de una lista, pero ¿existe tal lista ya disponible en Python?

De acuerdo con el documento puedes encontrarlos haciendo esto:

from matplotlib import lines lines.lineStyles.keys() >>> ['', ' ', 'None', '--', '-.', '-', ':'] 

Puedes hacer lo mismo con los marcadores.

EDITAR: En las últimas versiones , todavía hay los mismos estilos, pero puede variar el espacio entre puntos / líneas.

documentación de la plot

http://matplotlib.org/1.5.3/api/pyplot_api.html#matplotlib.pyplot.plot tiene una lista de estilos de línea + marcador:

 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 

Dado que esto es parte de la pyplot.plot pyplot.plot, también puede verlo desde el terminal con:

 import matplotlib.pyplot as plt help(plt.plot) 

Desde mi experiencia, es bueno tener los colores y marcadores en una lista para que pueda recorrerlos al trazar.

Así es como obtengo la lista de tales cosas. Tomó un poco de excavación.

 import matplotlib colors_array = matplotlib.colors.cnames.keys() markers_array = matplotlib.markers.MarkerStyle.markers.keys() 

En python3, el método .keys() devuelve un objeto dict_keys y no una list . Debe pasar los resultados a list() para poder indexar la matriz como podría hacerlo en python2. por ejemplo, esta pregunta SO

Así que para crear matrices iterables para líneas, colores y marcadores, puedes usar algo así.

 import matplotlib colors_array = list(matplotlib.colors.cnames.keys()) lines_array = list(matplotlib.lines.lineStyles.keys()) markers_array = list(matplotlib.markers.MarkerStyle.markers.keys()) 

No estoy respondiendo directamente a la pregunta de acceder a una lista, pero es útil tener una alternativa más en esta página: hay una forma adicional de generar estilos de línea discontinua.

Puedes generar líneas entre A y B con rayas transversales como

A

| segundo

A || || || || || || || || || || || || || || || || segundo

Un | | | | | | | | | | | | | | | | | | | | | | | | segundo

aumentando el ancho de su línea y especificando un patrón de guión personalizado:

ax.plot(x, y, dashes=[30, 5, 10, 5])

La documentación para matplotlib.lines.Line2D dice esto acerca de set_dashes(seq) :

Establezca la secuencia de guiones, secuencia de guiones con on off ink en puntos. Si seq está vacío o si seq = (Ninguno, Ninguno), el estilo de línea se establecerá en sólido.

ACEPTA: secuencia de tinta on / off en puntos

Creo que se podría haber dicho mejor: a medida que pinta la línea, la secuencia de números especifica cuántos puntos se pintan a lo largo de la línea, luego cuántos puntos quedan fuera (en caso de que haya dos números), cuántos se pintan, cuántos están sin pintar (en el caso de cuatro números en la secuencia). Con cuatro números, puede generar un guión dash línea de puntos: [30, 5, 3, 5] da un guión de 30 puntos de largo, un espacio de 5 puntos, un guión de 3 puntos (un punto) y un 5 -grupo de puntos. Luego se repite.

Esta página de la documentación explica esta posibilidad. Busca aquí dos formas diferentes de hacerlo.

Puedes copiar el diccionario del ejemplo de estilo de línea :

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

A continuación, puede iterar sobre los estilos de línea

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

O simplemente sacas un estilo de línea de esos,

 ax.plot([0,100], [0,1], linestyle=linestyles['loosely dashdotdotted'])