tiempo real matrices graficos graficas graficar coordenadas python matplotlib

real - matplotlib python



Usar Colormaps para establecer el color de la lĂ­nea en matplotlib (3)

El error que está recibiendo se debe a la forma en que define jet . Está creando el Colormap clase base con el nombre ''jet'', pero esto es muy diferente de obtener la definición predeterminada del mapa de colores ''jet''. Esta clase base nunca se debe crear directamente, y solo se deben crear instancias de las subclases.

Lo que has encontrado con tu ejemplo es un comportamiento defectuoso en Matplotlib. Debería haber un mensaje de error más claro generado cuando se ejecuta este código.

Esta es una versión actualizada de tu ejemplo:

import matplotlib.pyplot as plt import matplotlib.colors as colors import matplotlib.cm as cmx import numpy as np # define some random data that emulates your indeded code: NCURVES = 10 np.random.seed(101) curves = [np.random.random(20) for i in range(NCURVES)] values = range(NCURVES) fig = plt.figure() ax = fig.add_subplot(111) # replace the next line #jet = colors.Colormap(''jet'') # with jet = cm = plt.get_cmap(''jet'') cNorm = colors.Normalize(vmin=0, vmax=values[-1]) scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=jet) print scalarMap.get_clim() lines = [] for idx in range(len(curves)): line = curves[idx] colorVal = scalarMap.to_rgba(values[idx]) colorText = ( ''color: (%4.2f,%4.2f,%4.2f)''%(colorVal[0],colorVal[1],colorVal[2]) ) retLine, = ax.plot(line, color=colorVal, label=colorText) lines.append(retLine) #added this to get the legend to work handles,labels = ax.get_legend_handles_labels() ax.legend(handles, labels, loc=''upper right'') ax.grid() plt.show()

Resultando en:

Usar ScalarMappable es una mejora sobre el enfoque presentado en mi respuesta relacionada: crear más de 20 colores únicos de leyenda usando matplotlib

¿Cómo se establece el color de una línea en matplotlib con valores escalares proporcionados en tiempo de ejecución usando un mapa de color (por ejemplo, jet )? Probé un par de enfoques diferentes aquí y creo que estoy perplejo. values[] es una matriz almacenada de escalares. las curvas son un conjunto de matrices de 1-d, y las etiquetas son una matriz de cadenas de texto. Cada una de las matrices tiene la misma longitud.

fig = plt.figure() ax = fig.add_subplot(111) jet = colors.Colormap(''jet'') cNorm = colors.Normalize(vmin=0, vmax=values[-1]) scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=jet) lines = [] for idx in range(len(curves)): line = curves[idx] colorVal = scalarMap.to_rgba(values[idx]) retLine, = ax.plot(line, color=colorVal) #retLine.set_color() lines.append(retLine) ax.legend(lines, labels, loc=''upper right'') ax.grid() plt.show()


Pensé que sería beneficioso incluir lo que considero un método más simple usando el linspace de numpy junto con el objeto de tipo cm de matplotlib. Es posible que la solución anterior sea para una versión anterior. Estoy usando python 3.4.3, matplotlib 1.4.3 y numpy 1.9.3., Y mi solución es la siguiente.

import matplotlib.pyplot as plt from matplotlib import cm from numpy import linspace start = 0.0 stop = 1.0 number_of_lines= 1000 cm_subsection = linspace(start, stop, number_of_lines) colors = [ cm.jet(x) for x in cm_subsection ] for i, color in enumerate(colors): plt.axhline(i, color=color) plt.ylabel(''Line Number'') plt.show()

Esto da como resultado 1000 líneas de colores únicos que abarcan todo el mapa de colores cm.jet como se muestra a continuación. Si ejecuta este script, verá que puede acercarse a las líneas individuales.

cm.jet entre 0.0 y 1.0 con 1000 graduaciones

Ahora digo que quiero que mis 1000 colores de línea se extiendan por la parte verdosa entre las líneas 400 a 600. Simplemente cambio mis valores de inicio y detención a 0.4 y 0.6 y esto da como resultado usar solo el 20% del mapa de colores cm.jet entre 0.4 y 0.6.

cm.jet entre 0.4 y 0.6 con 1000 graduaciones

Por lo tanto, en un resumen de una línea puede crear una lista de colores rgba de un matplotlib.cm colormap en consecuencia:

colors = [ cm.jet(x) for x in linspace(start, stop, number_of_lines) ]

En este caso, utilizo el mapa invocado comúnmente llamado jet pero puede encontrar la lista completa de mapas de color disponibles en su versión de matplotlib invocando:

>>> from matplotlib import cm >>> dir(cm)


Una combinación de estilos de línea, marcadores y colores cualitativos de matplotlib :

import itertools import matplotlib as mpl import matplotlib.pyplot as plt N = 8*4+10 l_styles = [''-'',''--'',''-.'','':''] m_styles = ['''',''.'',''o'',''^'',''*''] colormap = mpl.cm.Dark2.colors # Qualitative colormap for i,(marker,linestyle,color) in zip(range(N),itertools.product(m_styles,l_styles, colormap)): plt.plot([0,1,2],[0,2*i,2*i], color=color, linestyle=linestyle,marker=marker,label=i) plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.,ncol=4);