#python #pandas #matplotlib #bar-chart #data-visualization
#python #pandas #matplotlib #столбчатая диаграмма #визуализация данных
Вопрос:
Используя pandas в jupyter notebook, я генерирую столбчатый график оценки взаимодействия для выборочных движений, окрашенных в соответствии с классификацией этого движения. Классификации — VS, SUB, OBV, VO и CTRL. Таким образом, я использую этот код для построения:
colors = {'VS':'blue',
'SUB':'green',
'OBV': 'orange',
'VO': 'red',
'CTRL': 'black'}
cat_data.sort_values('Interaction_rounded').plot.bar(x='Motion',
y='Interaction_rounded',
rot=90,
title='All Motions Interaction Score Colored by Classification',
color = [colors[i] for i in cat_data['Classification']],
fontsize = 8,
legend = False)
Но я получаю эту диаграмму:
Ребята, вы видите, как CTRL, который должен быть черным, не является? То же самое с ударом кулаком, который не должен быть черным. Кто-нибудь знает, что я могу сделать, чтобы исправить это?
Комментарии:
1. Ну, вы сортируете данные для вызова plot, но не цвета, поэтому я предполагаю, что вам нужно что-то вроде
[colors[i] for i in cat_data.sort_values('Interaction_rounded')['Classification']]
или лучше отсортировать один раз перед построением графика…2. Вау, это было именно так! Я не знал, что мне также приходилось сортировать данные по цветам. Большое спасибо.
Ответ №1:
Вот что я делаю:
- предварительно вычислите ваши цвета в виде столбца во фрейме данных,
- отсортируйте весь фрейм данных и
- передайте эту копию фрейма данных в функцию построения графика, которая может получить доступ к недавно отсортированным данным:
colors = {'VS':'blue',
'SUB':'green',
'OBV': 'orange',
'VO': 'red',
'CTRL': 'black'}
_ = (
cat_data
.sort_values('Interaction_rounded')
.assign(colors=lambda df: df['Classification'].map(colors)
.pipe(lambda df:
df.plot.bar(
x='Motion',
y='Interaction_rounded',
rot=90,
title='All Motions Interaction Score Colored by Classification',
color=df['colors'], # now you can access the latest version of the dataframe
fontsize=8,
legend=False
)
)
)
Комментарии:
1. Вау, это определенно то, что я сделаю в следующий раз, чтобы упростить и упорядочить процесс. Большое спасибо, Пол.