1

我正在尝试将标签添加到分组的 hvplot barchart

我的示例数据框具有以下结构:

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 条形图

我试图根据这个这个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)

对解决方案的任何提示表示赞赏。谢谢!

4

1 回答 1

0

这对于普通条形图是可能的,但不幸的是,对于分组条形图还不可能:https ://github.com/holoviz/holoviews/pull/3385

您可以在 col 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)
于 2020-01-15T22:25:19.990 回答