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

Holoviews - How to create side-by-side bars from dataframe columns?

我想创建一个 Holoviews 条形图(使用 Bokeh 后端),其中年份在 X 轴上,A 列和 B 列在 Y 轴上。对于每一年,我希望 A 列和 B 列的值的条形图彼此相邻显示,即对于 2008 年,我有高度为 1 和 3 的条形图,对于 2009 年,我有高度为 3 和 6 的条形图,依此类推。我尝试了多种不同的方法,包括文档中的 grouped bars 示例,但无法使其正常工作。请参阅下面的示例:

%%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

请帮忙。我快疯了!

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

要响应 @pongo30,您可以通过将 .opts(xlabel='') 添加到对 [=11= 的调用来抑制在 x-axis 上打印 'A' 和 'B' ](例如:df.hvplot.bar('Year').opts(xlabel='')