Hvplot/ боке подведены Гистограмма от Pandas Dataframe
Я пытаюсь напечатать "простую" гистограмму, используя HVPlot и bokeh в блокноте jupyter. Вот некоторые упрощенные данные:
Мои данные изначально выглядят так:
Моя цель - получить такую гистограмму (обратите внимание, что она не должна быть сложена. Единственное, что важно - это итоги.):
Поскольку я не мог понять, как получить гистограмму с суммой определенных столбцов, я использовал pandas.melt
чтобы моделировать данные так:
С помощью этих данных я могу построить график, но тогда значения не суммируются. Вместо этого есть несколько баров друг за другом.
Вот код, который я использовал для тестирования:
testd = {'Name': ['Item1', 'Item2','Item3','Item3'],'Filter': ['F1','F2','F1','F1'],
'Count': [1,5,2,1], 'CountCategory': ['CountA','CountB','CountA','CountD']}
testdf = pd.DataFrame(data=testd)
testdf.hvplot.bar('CountCategory','Count',groupby='Filter', rot=90, aggregator=np.sum)
Это ничего не изменит, если я опущу aggregator=np.sum
Кто-нибудь знает, как правильно построить это? Он не должен использовать "транспонированные" данные, поскольку я делаю это только потому, что не знаю, как построить исходные данные. И другой вопрос будет, если есть возможность
1 ответ
aggregator
используется операцией datashade/rasterize для агрегирования данных и действительно не влияет на гистограммы. Если вы хотите объединить данные, я рекомендую сделать это, используя методы pandas. Однако в вашем случае я не думаю, что это проблема, основная проблема в реализации запрошенного вами сюжета состоит в том, что в holoviews легенда, как правило, связана со стилем, что означает, что вы не можете легко получить легенду для отображения фильтра. и раскрасить каждую полосу отдельно.
Вы можете сделать это и добавить Фильтр как столбец при наведении, что означает, что у вас все еще есть доступ к нему:
testdf.hvplot.bar('CountCategory', 'Count', by='Name', stacked=True, rot=90, hover_cols=['Filter'])
Я, вероятно, подниму проблему в HoloViews, чтобы поддержать легенду, отделенную от стиля.