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.
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:Float
my_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:
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"])
No hay comentarios:
Publicar un comentario