2

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)

data 1

data 2

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]})
Weena
  • 55
  • 1
  • 6

0 Answers0