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
El próximo matplotlib v1.5 depreciará color_cycle para la nueva función 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])")
Luego siga adelante y cree sus ejes y complots!
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