Holoviews - Как создать параллельные панели из столбцов данных? - PullRequest
0 голосов
/ 28 сентября 2018

Я хотел бы создать гистограмму Holoviews (используя боке-боке), в которой год находится на оси X, а столбцы A и B - на оси Y.Для каждого года я хочу, чтобы столбцы для значений из столбцов A и B отображались рядом друг с другом, то есть для 2008 года у меня есть столбцы высот 1 и 3, для 2009 года - столбцы 3 и 6 высоты и т. Д.Я пробовал множество различных способов, включая пример сгруппированных баров в документации, но не могу заставить его работать.Смотрите пример ниже:

%%opts Bars [xrotation=90 width=600 show_legend=False tools=['hover']]
df=pd.DataFrame({'Year':[2008,2009,2010,2011,2012,2013],
   'A': [1,2,3,4,5,6],'B':[3,6,9,12,15,18]})
print(df)
bars = hv.Bars(df, kdims=['Year'], vdims=['A'])
bars

Пожалуйста, помогите.Я схожу с ума!

1 Ответ

0 голосов
/ 28 сентября 2018

HoloViews обычно работает лучше всего, когда ваши данные находятся в так называемом аккуратном формате.Однако для облегчения работы с данными, подобными вашим, мы разработали сопутствующую библиотеку под названием hvPlot .Для создания нужного вам графика вы можете просто запустить:

import hvplot.pandas
df=pd.DataFrame({'Year':[2008,2009,2010,2011,2012,2013],
   'A': [1,2,3,4,5,6],'B':[3,6,9,12,15,18]})
df.hvplot.bar('Year')

enter image description here

В качестве альтернативы вы можете узнать о методе pd.melt, который можетданные в широком формате и преобразовать их в аккуратный набор данных:

%%opts Bars [xrotation=90 width=600 show_legend=False tools=['hover']]
df=pd.DataFrame({'Year':[2008,2009,2010,2011,2012,2013],
   'A': [1,2,3,4,5,6],'B':[3,6,9,12,15,18]})
tidy_df = df.melt(id_vars=['Year'], value_vars=['A', 'B'])
bars = hv.Bars(tidy_df, ['Year', 'variable'], ['value'])
bars
...