Добавление значений в сгруппированную гистограмму в hvplot

Я пытаюсь добавить метки к сгруппированной гистограмме 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

Я попытался добавить метки в соответствии с этим и это 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)

Любой намек на решение приветствуется. Благодарю вас!


person nsis    schedule 15.01.2020    source источник


Ответы (1)


Это возможно для обычных гистограмм, но, к сожалению, пока невозможно для сгруппированных гистограмм: 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)
person Sander van den Oord    schedule 15.01.2020
comment
Спасибо, Сандер, за указание на это! Надеюсь, скоро это станет возможным для гистограмм, так как эта функция очень востребована в моей организации. - person nsis; 16.01.2020