Я смотрю, как сделать две вещи в Seaborn с использованием гистограммы для отображения значений, которые находятся в кадре данных, но не в графике
1) Я хочу отобразить значения одного поля в кадре данных при построении графика другого. Например, ниже я отображаю график "tip", но я бы хотел разместить значение "total_bill" с центром над каждым из баров (т.е. 325,88 выше пятницы, 1778,40 выше субботы и т.д.)
2) Есть ли способ масштабировать цвета баров, при этом самое низкое значение "total_bill" имеет самый светлый цвет (в данном случае пятница), а самое высокое значение "total_bill" - самое темное. Очевидно, что я буду придерживаться одного цвета (то есть синего), когда я делаю масштабирование.
Спасибо! Я уверен, что это легко, но мне не хватает этого..
Хотя я вижу, что другие считают, что это дубликат другой проблемы (или двух), я упускаю часть того, как я использую значение, которого нет на графике, в качестве основы для метки или затенения. Как я могу сказать, используйте total_bill в качестве основы. Извините, но я просто не могу понять это на основании этих ответов.
Начиная со следующего кода,
import pandas as pd
import seaborn as sns
%matplotlib inline
df=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata- book/master/ch08/tips.csv", sep=',')
groupedvalues=df.groupby('day').sum().reset_index()
g=sns.barplot(x='day',y='tip',data=groupedvalues)
Я получаю следующий результат:
Временное решение:
for index, row in groupedvalues.iterrows():
g.text(row.name,row.tip, round(row.total_bill,2), color='black', ha="center")
На затенении, используя приведенный ниже пример, я попробовал следующее:
import pandas as pd
import seaborn as sns
%matplotlib inline
df=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata-book/master/ch08/tips.csv", sep=',')
groupedvalues=df.groupby('day').sum().reset_index()
pal = sns.color_palette("Greens_d", len(data))
rank = groupedvalues.argsort().argsort()
g=sns.barplot(x='day',y='tip',data=groupedvalues)
for index, row in groupedvalues.iterrows():
g.text(row.name,row.tip, round(row.total_bill,2), color='black', ha="center")
Но это дало мне следующую ошибку:
AttributeError: у объекта DataFrame нет атрибута argsort
Итак, я попробовал модификацию:
import pandas as pd
import seaborn as sns
%matplotlib inline
df=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata-book/master/ch08/tips.csv", sep=',')
groupedvalues=df.groupby('day').sum().reset_index()
pal = sns.color_palette("Greens_d", len(data))
rank=groupedvalues['total_bill'].rank(ascending=True)
g=sns.barplot(x='day',y='tip',data=groupedvalues,palette=np.array(pal[::-1])[rank])
и это оставляет меня с
IndexError: индекс 4 выходит за пределы оси 0 с размером 4