Holoviews - 如何从数据框列创建并排条形图?

问题描述 投票:0回答:3

我想创建一个 Holoviews 条形图(使用 Bokeh 后端),其中年份位于 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

请帮忙。我快失去理智了!

python bokeh holoviews hvplot
3个回答
1
投票

当您的数据采用所谓的整齐格式时,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')

或者,您可以了解 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

0
投票

要响应 @pongo30,您可以通过将

.opts(xlabel='')
添加到对
hvplot.bar()
的调用中来禁止在 x 轴上打印“A”和“B”(例如:
df.hvplot.bar('Year').opts(xlabel='')


0
投票

使用 .opts(multi_level=False),这对我有用。 df.hvplot.bar('年份').opts(multi_level=False)

© www.soinside.com 2019 - 2024. All rights reserved.