在 hvplot 中向分组条形图添加值
Adding values to grouped bar chart in hvplot
我正在尝试将标签添加到 grouped hvplot 条形图。
我的示例数据框具有以下结构:
import pandas as pd
import numpy as np
import holoviews as hv
import hvplot.pandas
hv.extension('bokeh')
df = pd.DataFrame({'A' : ['A','B','A','B','A','B'],
'B' : [1,1,2,2,3,3],
'C' : list((range(20,26)))
})
条形图是使用以下代码创建的:
bar = df.hvplot.bar(x='B', y='C', by='A')
bar
hvplot bar chart
我尝试根据 and SO问题添加标签:
labels = hv.Labels(data=df, kdims=['B','A'],vdims='C')
labels
但是两个图的叠加
bar * labels
结果出错,虽然尺寸对我来说似乎是一样的。
ValueError: all the input arrays must have same number of dimensions
:Overlay
.Bars.I :Bars [B,A] (C)
.Labels.I :Labels [B,A] (C)
对解决方案的任何提示表示赞赏。谢谢!
这对于普通条形图是可行的,但遗憾的是,这对于分组条形图尚不可行:https://github.com/holoviz/holoviews/pull/3385
您可以在 A 列中为每个类别创建单独的条形图,然后添加标签,但这样您将不会有分组条形图:
def barplot_and_labels_category(category):
df_subset = df[df.A == category]
plot = df_subset.hvplot.bar(x='B', y='C', ylim=(0, 30))
labels = hv.Labels(
df_subset,
kdims=['B', 'C'],
vdims='C',
).opts(text_color='black', text_font_size='20pt')
return plot * labels
(barplot_and_labels_category('A') + barplot_and_labels_category('B')).cols(1)
我正在尝试将标签添加到 grouped hvplot 条形图。
我的示例数据框具有以下结构:
import pandas as pd
import numpy as np
import holoviews as hv
import hvplot.pandas
hv.extension('bokeh')
df = pd.DataFrame({'A' : ['A','B','A','B','A','B'],
'B' : [1,1,2,2,3,3],
'C' : list((range(20,26)))
})
条形图是使用以下代码创建的:
bar = df.hvplot.bar(x='B', y='C', by='A')
bar
hvplot bar chart
我尝试根据
labels = hv.Labels(data=df, kdims=['B','A'],vdims='C')
labels
但是两个图的叠加
bar * labels
结果出错,虽然尺寸对我来说似乎是一样的。
ValueError: all the input arrays must have same number of dimensions
:Overlay
.Bars.I :Bars [B,A] (C)
.Labels.I :Labels [B,A] (C)
对解决方案的任何提示表示赞赏。谢谢!
这对于普通条形图是可行的,但遗憾的是,这对于分组条形图尚不可行:https://github.com/holoviz/holoviews/pull/3385
您可以在 A 列中为每个类别创建单独的条形图,然后添加标签,但这样您将不会有分组条形图:
def barplot_and_labels_category(category):
df_subset = df[df.A == category]
plot = df_subset.hvplot.bar(x='B', y='C', ylim=(0, 30))
labels = hv.Labels(
df_subset,
kdims=['B', 'C'],
vdims='C',
).opts(text_color='black', text_font_size='20pt')
return plot * labels
(barplot_and_labels_category('A') + barplot_and_labels_category('B')).cols(1)