web-dev-qa-db-fra.com

Comment puis-je convertir des nombres en une échelle de couleurs dans matplotlib?

Je fais un graphique à barres et je veux que les couleurs des barres varient du rouge au bleu en fonction d'un dégradé de couleurs. J'ai une dimension du bloc de données qui me dit où sur l'échelle rouge-bleue chaque barre doit être. Ma méthode actuelle consiste à convertir manuellement ces valeurs en couleurs RVB en interpolant linéairement entre les couleurs RVB rouge et bleu, mais je veux un moyen automatique de convertir mes valeurs numériques en une échelle de couleurs. J'ai également besoin d'avoir une légende de barre de couleur pour aider à l'interpréter.

13
Aaron

Il est assez simple de créer un graphique à barres et de définir les couleurs des barres en fonction d'une valeur de la trame de données. Une palette de couleurs et une instance de normalisation aident à convertir les valeurs en couleurs, qui sont comprises par l'argument color de matplotlib.Axes.bar. La barre de couleurs est ensuite créée à partir d'un ScalarMappable en utilisant la même normalisation et la même palette de couleurs que les barres.

enter image description here

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()

Pour utiliser une palette de couleurs personnalisée avec des graphiques à barres, voir Barplot coloré selon une palette de couleurs?

24