#python #data-visualization #seaborn #visualization
#python #визуализация данных #seaborn #визуализация
Вопрос:
я хочу визуализировать с помощью seaborn и добавить текст. это мой код:
# barplot price by body-style
fig, ax = plt.subplots(figsize = (12,8))
g = data[['body-style','price']].groupby(by = 'body-
style').sum().reset_index().sort_values(by='price')
x = g['body-style']
y = g['price']
ok = sns.barplot(x,y, ci = None)
ax.set_title('Price By Body Style')
def autolabel(rects):
for idx,rect in enumerate(ok):
height = rect.get_height()
g.text(rect.get_x() rect.get_width()/2., 0.2*height,
g['price'].unique().tolist()[idx],
ha='center', va='bottom', rotation=90)
autolabel(ok)
но я отправляю ошибку:
Комментарии:
1. что означает автоматическая метка (ax.исправлено)? где я могу это записать?
2. @JohanC я все еще ошибаюсь в коде
3. я закончил пробовать и получил ошибку
Ответ №1:
Вам нужно несколько изменений:
- Поскольку вы уже создали
ax
, вам нужноsns.barplot(..., ax=ax)
. autolabel()
необходимо вызвать со списком баров в качестве аргумента. С seaborn вы получаете этот список черезax.patches
.for idx,rect in enumerate(ok):
не следует использоватьok
ноrects
.- Вы не можете использовать
g.text
.g
является фреймом данных и не имеет.text
функции. Вам нужноax.text
. - Использование
g['price'].unique().tolist()[idx]
в качестве текста для печати не имеет никакого отношения к отображаемым столбцам. Вместо этого вы могли бы использоватьheight
.
Вот некоторый тестовый код с игрушечными данными:
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
fig, ax = plt.subplots(figsize=(12, 8))
g = data[['body-style','price']].groupby(by = 'body-style').sum().reset_index().sort_values(by='price')
x = g['body-style']
y = g['price']
# x = list('abcdefghij')
# y = np.random.randint(20, 100, len(x))
sns.barplot(x, y, ci=None, ax=ax)
ax.set_title('Price By Body Style')
def autolabel(rects):
for rect in rects:
height = rect.get_height()
ax.text(rect.get_x() rect.get_width() / 2., 0.2 * height,
height,
ha='center', va='bottom', rotation=90, color='white')
autolabel(ax.patches)
plt.show()
PS: Вы можете изменить размер шрифта текста с помощью параметра на ax.text
: ax.text(..., fontsize=14)
.