如何从 hv.Dataset 创建分组条形图?

How to create grouped barplot from hv.Dataset?

我想使用 Holoviews 数据集从 pandas.DataFrame 创建一个分组条形图。

特别是我希望按原始列对条形进行分组。 现在条形图被绘制在彼此之上:

import pandas as pd
import holoviews as hv
hv.extension('bokeh')

df = pd.DataFrame({'A': list(range(10,15)),
                   'B' : list(reversed(range(20,25)))})
ds = hv.Dataset(df, kdims='index')
ds.to.bars(vdims='A')*ds.to.bars(vdims='B').opts(alpha=.5)

这导致: current snippet

但是我希望将它们并排放置,类似于 official docs(页面底部)中的情节。

对于直接使用 pandas DataFrames 绘图,我会推荐 hvPlot library which is built on top of HoloViews. HoloViews deals well with so called tidy data,而 hvPlot 可以很好地处理整洁和广泛的数据。使用 hvPlot 生成你想要的图很简单:

import hvplot.pandas
df.hvplot.bar()

直接使用 HoloViews,您将不得不使用 pd.melt 将数据转换为所谓的整洁格式。看起来像这样:

hv.Bars(pd.melt(df.reset_index(), ['index']), ['index', 'variable'], 'value')

有关 pd.melt 正在做什么的简洁解释,请参阅 this visualization