Определение оттенков по значениям столбцов в seaborn barplot

#matplotlib #seaborn

#matplotlib #seaborn

Вопрос:

Я бы хотел, чтобы цвет столбцов определялся их значением по оси x, например, столбцам с одинаковыми значениями по оси x должны быть присвоены одинаковые цвета.

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

Вот как это выглядит на данный момент с настройками по умолчанию. Я полагаю, что есть простой элегантный способ сделать это, но заинтересован в любом решении.

введите описание изображения здесь

Комментарии:

1. Вы пытались указать оттенок? Он же добавление hue='col1' в качестве аргумента sns.barplot .

2. это не исправляет

Ответ №1:

Вот решение:

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

Примечание: mpl.cm.magma является Colormap экземпляром и используется для преобразования значений данных (с плавающей запятой) из интервала [0, 1] в цвета, которые Colormap представляет. Если вы хотите «автоматическое масштабирование» ваших значений данных, вы можете использовать palette=mpl.cm.ScalarMappable(cmap='magma').to_rgba(df['col1']) вместо этого в sns.barplot() вызове.

Здесь вывод:линейчатая диаграмма

Комментарии:

1. Вы должны использовать объект matplotlib normalize, чтобы избежать ручного указания скалярного коэффициента здесь.

2. @mwaskom, ScalarMappable вариант, который я предложил в своей заметке Normalize , автоматически использует объект, см. Документы . Однако в версии, заданной вручную, цвета выглядели красивее. 🙂

3. Упс, извините, полностью пропустил абзац после кода!

4. PS: Normalize версия на основе a будет: palette=mpl.cm.magma(mpl.colors.Normalize()(df['col1'])) . Не включил это в ответ, поскольку двух вариантов показалось достаточно.