themachinist
themachinist

Reputation: 1433

Define hues by column values in seaborn barplot

I would like the colour of the columns to be determined by their value on the x-axis, e.g. bars with identical values on the x-axis should have identical colours assigned to them.

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd 

df = pd.DataFrame(index=['A','B','C','D','E','F'],data={'col1':np.array([2.3423,4.435,9.234,9.234,2.456,6.435])})
ax = sns.barplot(x='col1', y=df.index.values, data=df,palette='magma')

This is what it looks like at the moment with default settings. I presume there is a simple elegant way of doing this, but interested in any solution.

enter image description here

Upvotes: 3

Views: 5011

Answers (1)

Ulrich Stern
Ulrich Stern

Reputation: 11301

Here a solution:

import seaborn as sns
import matplotlib as mpl, matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.DataFrame(index=['A','B','C','D','E','F'],
  data={'col1':np.array([2.3423,4.435,9.234,9.234,2.456,6.435])})
ax = sns.barplot(x='col1', y=df.index.values, data=df,
  palette=mpl.cm.magma(df['col1']*.1))

Note: mpl.cm.magma is a Colormap instance and is used to convert data values (floats) from the interval [0, 1] to colors that the Colormap represents. If you want "auto scaling" of your data values, you could use palette=mpl.cm.ScalarMappable(cmap='magma').to_rgba(df['col1']) instead in the sns.barplot() call.

Here the output:barplot

Upvotes: 6

Related Questions