Estoy haciendo un gráfico de barras y quiero que los colores de las barras varíen de rojo a azul según un gradiente de color. Tengo una dimensión del marco de datos que me dice dónde debe estar cada barra en la escala rojo-azul. Mi método actual es convertir manualmente estos valores a colores RGB mediante la interpolación lineal entre los colores rojo y azul RGB, pero quiero una forma automática de convertir mis valores numéricos a una escala de colores. También necesito poder tener una leyenda de barra de colores para ayudar a interpretarla.
Es bastante sencillo crear un gráfico de barras y establecer los colores de la barra de acuerdo con un valor del marco de datos. Un mapa de colores y una instancia de normalización ayudan a convertir los valores en colores, que son entendidos por el argumento de color de matplotlib.Axes.bar . Luego, la barra de colores se crea a partir de un ScalarMappable usando la misma normalización y el mismo mapa de colores que las barras.
import matplotlib.pyplot as plt import matplotlib.colors import numpy as np; np.random.seed(0) import pandas as pd x = np.arange(12) y = np.random.rand(len(x))*51 c = np.random.rand(len(x))*3+1.5 df = pd.DataFrame({"x":x,"y":y,"c":c}) cmap = plt.cm.rainbow norm = matplotlib.colors.Normalize(vmin=1.5, vmax=4.5) fig, ax = plt.subplots() ax.bar(df.x, df.y, color=cmap(norm(df.c.values))) ax.set_xticks(df.x) sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm) sm.set_array([]) # only needed for matplotlib < 3.1 fig.colorbar(sm) plt.show()Para usar un mapa de colores personalizado con gráficos de barras, consulte ¿Gráfico de barras coloreado según un mapa de colores?