I'm currently using a colormap to color a stacked barplot from a pandas dataframe. The problem is, that I want to make multiple plots. (see pictures)
Right now the colormap uses the smallest and biggest value of each dataset to specify the colors. I would like to change that in the following way:
- the same color should always represent the same value (even if the minimal value differs)
- ideally I want to specify them only once and not every time I create a new plot
Is there a way to take colors from a colormap and attach them to specific values?
Several previous questions touch on a very similar subject, for example here: Color by Column Values in Matplotlib None of the questions I found, referred to barplots however.
Here is my code:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({'DN': [20, 25, 32, 40, 50],
'Fall 1': [200, 300, 450, 200, 80],
'Fall 2': [250, 250, 450, 210, 70],
'Fall 3': [300, 200, 350, 310, 70]})
gesamtlaenge = 200 + 300 + 450 + 200 + 80
df = df.set_index('DN')
df = df.transpose()
# Skalierung auf Maximum:
df = df.divide(gesamtlaenge, axis=0)
df = df.multiply(100, axis=0)
f, b = plt.subplots(figsize=(9, 6))
ax = df.plot(ax=f.gca(),
title='titel',
kind='barh', stacked=True,
colormap='summer_r',
edgecolor='black',
fontsize=14)
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5), fontsize=14)
ax.set_xlabel('Anteil in %', fontsize=14)
ax.set_title('title', fontsize=14)
f.tight_layout()
f.subplots_adjust(right=0.8)
plt.show()
The second dataframe I used:
df = pd.DataFrame({'DN': [25, 32, 40, 50],
'Fall 1': [300, 450, 200, 80],
'Fall 2': [250, 500, 210, 70],
'Fall 3': [200, 350, 310, 170]})