如何从 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
我想使用 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