legends graficos graficas graficar example coordenadas python matplotlib

graficos - matplotlib python



¿Puedo pasar por los estilos de línea en matplotlib? (7)

Sé cómo recorrer una lista de colores en matplotlib. ¿Pero es posible hacer algo similar con los estilos de línea (simple, punteado, discontinuo, etc.)? Tendría que hacer eso para que mis gráficos sean más fáciles de leer cuando se impriman. ¿Alguna sugerencia de cómo hacer eso?


Algo como esto podría hacer el truco:

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

Resultado:

Editar para una versión más nueva (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()

Para obtener información más detallada, consulte el tutorial matplotlib sobre "Styling with cycler".
Para ver la salida, haga clic en " mostrar figura "


Aquí hay algunos ejemplos del uso de los cicladores para desarrollar conjuntos de estilos

los cicladores se pueden agregar para dar composiciones (rojo con ''-'', azul con ''-'', ...)

plt.rc(''axes'', prop_cycle=(cycler(''color'', list(''rbgk'')) + cycler(''linestyle'', [''-'', ''--'', '':'', ''-.''])))

uso directo en Ejes:

ax1.set_prop_cycle(cycler(''color'', [''c'', ''m'', ''y'', ''k'']) + cycler(''lw'', [1, 2, 3, 4]))

los cicladores se pueden multiplicar ( http://matplotlib.org/cycler/ ) para ofrecer una gama más amplia de estilos únicos

for ax in axarr: ax.set_prop_cycle(cycler(''color'', list(''rbgykcm'')) * cycler(''linestyle'', [''-'', ''--'']))

ver también: http://matplotlib.org/examples/color/color_cycle_demo.html



Si desea que el cambio sea automático, puede agregar estas dos líneas en el archivo axes.py de matplotlib: busque esa línea:

self.color_cycle = itertools.cycle(clist)

y agregue la siguiente línea debajo:

self.line_cycle = itertools.cycle(["-",":","--","-.",])

Y busca la línea:

kw[''color''] = self.color_cycle.next()

y agrega la línea:

kw[''linestyle''] = self.line_cycle.next()

Supongo que puedes hacer lo mismo para marcador.


Similar a los gráficos de Avaris pero diferentes ...

import matplotlib.pyplot as plt import numpy as np #set linestyles (for-loop method) colors=(''k'',''y'',''m'',''c'',''b'',''g'',''r'',''#aaaaaa'') linestyles=(''-'',''--'',''-.'','':'') styles=[(color,linestyle) for linestyle in linestyles for color in colors] #-- sample data numLines=30 dataXaxis=np.arange(0,10) dataYaxis=dataXaxis+np.array([np.arange(numLines)]).T plt.figure(1) #----------- # -- array oriented method but I cannot set the line color and styles # -- without changing Matplotlib code plt.plot(datax[:,np.newaxis],datay.T) plt.title(''Default linestyles - array oriented programming'') #----------- #----------- # -- ''for loop'' based approach to enable colors and linestyles to be specified plt.figure(2) for num in range(datay.sh![enter image description here][1]ape[0]): plt.plot(datax,datay[num,:],color=styles[num][0],ls=styles[num][1]) plt.title(''User defined linestyles using for-loop programming'') #----------- plt.show()


Usualmente uso una combinación de colores básicos y estilos de vida para representar diferentes conjuntos de datos. Supongamos que tenemos 16 conjuntos de datos, cada cuatro conjuntos de datos que pertenecen a algún grupo (que tienen alguna propiedad en común), luego es fácil de visualizar cuando representamos cada grupo con un color común pero sus miembros con diferentes estilos de línea.

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


Utilizo un código similar a este para recorrer diferentes estilos de línea. Por defecto los colores se repiten después de 7 trazados.

idx = 0 for ds in datasets: if idx < 7: plot(ds) elif idx < 14: plot(ds, linestyle=''--'') else: plot(ds, linestyle='':'') idx += 1