GOOGLE ADS

lunes, 25 de abril de 2022

Cambiar el color de la línea en el gráfico según los valores de la columna

Me gustaría hacer un gráfico en el que los colores de las muchas curvas que representan cambien según un valor coincidente en una columna específica.

La base de datos se presenta de la siguiente manera:

row0 = {"A":[0,1,2,3,4,5], "B":[0,2,4,6,8,10]}
row1 = {"A":[0,1,2,3,4,5], "B":[0,3,9,12,15,18]}
row2 = {"A":[0,1,2,3,4,5], "B":[0,4,8,12,16,20]}
row = [row0,row1,row2]
Test = {"Float":[0.5,10.24,25.2], "Funtions": row }
Test_ = pd.DataFrame(data = Test)

Una columna en el marco de datos contiene valores flotantes. La segunda columna contiene un marco de datos con dos columnas (pandas.core.frame.DataFrame).

Básicamente, quiero trazar el gráfico en la segunda columna de cada fila.

Puedo hacer esto fácilmente de esta manera:

for m in range(len(Test_)):
Func = (Test_["Funtions"][m])
plt.plot(Func["A"], Func["B"])
plt.show()

Estoy insertando el resultado para que sea aún más claro.

ingrese la descripción de la imagen aquí

En este punto, me gustaría que cada una de estas curvas cambie de color según el valor de la columna de valores numéricos "Flotante". También me gustaría añadir una barra de colores.

Espero haber sido lo suficientemente claro. Gracias por tu apoyo.

PD. Gracias Sr. T por las sugerencias. He vuelto a hacer la pregunta y he añadido un ejemplo práctico.


Solución del problema

Esta es seguramente una de las estructuras de dataframe más... interesantes... que he visto. No estoy seguro de cómo terminaste con eso. Pero esta no es la pregunta aquí, así que importamos (o construimos) un mapamy_cmap de colores para mapear los valores normalizadosmy_norm a colores, luego usamos el normalizado para crear una barra de colores:Floatmy_cmap

import matplotlib.pyplot as plt
import pandas as pd
from matplotlib import cm, colors
#your data
row0 = {"A":[0,1,2,3,4,5], "B":[0,2,4,6,8,10]}
row1 = {"A":[0,1,2,3,4,5], "B":[0,3,9,12,15,18]}
row2 = {"A":[0,1,2,3,4,5], "B":[0,4,8,12,16,20]}
Test_ = pd.DataFrame({"Float": [0.5,10.24,25.2], "Funtions": [row0,row1,row2]})
fig, ax = plt.subplots(figsize=(8, 5))
my_cmap = cm.viridis
my_norm = colors.Normalize(vmin=Test_["Float"].min(), vmax=Test_["Float"].max())
for m in range(len(Test_)):
Func = (Test_["Funtions"][m])
ax.plot(Func["A"], Func["B"], color=my_cmap(my_norm(Test_["Float"][m])))

fig.colorbar(cm.ScalarMappable(norm=my_norm, cmap=my_cmap), orientation="vertical", label="Float value")
plt.show()

Salida de muestra:
ingrese la descripción de la imagen aquí

Si prefiere clasificar las curvas mostradas, también puede utilizar un mapa de colores cualitativo o crear su propio ListedColorMap:

my_cmap = colors.ListedColormap(["blue", "gold", "red"])

ingrese la descripción de la imagen aquí

No hay comentarios:

Publicar un comentario

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...