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

时间:2019-01-30 11:57:06

标签: python bokeh holoviews

我想使用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(页面底部)中显示的情节。

1 个答案:

答案 0 :(得分:1)

对于直接使用pandas DataFrames进行绘图,我建议使用hvPlot库,该库基于HoloViews构建。 HoloViews可以很好地处理所谓的tidy data,而hvPlot可以很好地处理整齐和宽广的数据。使用hvPlot生成所需的绘图非常简单:

import hvplot.pandas
df.hvplot.bar()

bar plot

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

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

melt_example

要详细了解pd.melt在做什么,请参见this visualization