Hvplot / боке подведены Гистограмма от Pandas Dataframe - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь напечатать «простую» гистограмму, используя 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 Ответ

0 голосов
/ 29 января 2019

aggregator используется операцией datashade / rasterize для агрегирования данных и действительно не влияет на гистограммы.Если вы хотите объединить данные, я рекомендую сделать это с помощью методов pandas.Однако в вашем случае я не думаю, что это проблема, основная проблема в реализации запрошенного вами сюжета состоит в том, что в holoviews легенда, как правило, связана со стилем, что означает, что вы не можете легко получить легенду для отображения фильтра. и окрашивают каждую полосу отдельно.

Вы можете сделать это и добавить фильтр в качестве столбца при наведении, что означает, что у вас все еще есть доступ к нему:

testdf.hvplot.bar('CountCategory', 'Count', by='Name', stacked=True, rot=90, hover_cols=['Filter'])

barplot1

Вероятно, я подниму проблему в HoloViews, чтобы поддержать легенду, отделенную от стиля.

...