与Bokeh的简单的金字塔hbar图

问题描述 投票:0回答:1

我尝试创建一个非常简单的金字塔图表哦水平条与Bokeh像this example之一。

我想要完成的结果是这样的:

example

是否可以使用像这样的简单dict创建它:

data = {'A': [0.8, 0.85], 'B': [0.31, 0.28], 'C': [0.91, 0.88], 'D': [0.73, 0.78]}

我不知道如何准备我的数据以符合这种图表。

是这样的吗? :

>>> df = pd.DataFrame([[0.8, 0.85], [0.31, 0.28], [0.91, 0.88], [0.73, 0.78]], index=['A', 'B', 'C', 'D'], columns=['label1', 'label2'])
>>> df
   label1  label2
A    0.80    0.85
B    0.31    0.28
C    0.91    0.88
D    0.73    0.78
python charts bar-chart bokeh
1个回答
0
投票

我发现我的解决方案给了我这个结果:pyramid result

根据示例population.py from Bokeh Github repo,在包括import pandas as pd之后,我只更改了以下代码:

gender_transform = CustomJSTransform(args=dict(source=ages), func="", v_func="""
    var val = new Float64Array(xs.length)
    for (var i = 0; i < xs.length; i++) {
        if (source.data['Label'][i] == 'label1') # <--- This line only
            val[i] = -xs[i]
        else
            val[i] = xs[i]
    }
    return val
""")


groups = ['A', 'B', 'C', 'D']   # <--- Override the age group

pyramid = figure(plot_width=600, plot_height=500, toolbar_location=None, y_range=groups,
                 title="label1 vs label2",
                 x_axis_label="",y_axis_label="", x_range=[-1, 1])
pyramid.hbar(y="NameGrp", height=0.5, right=transform('Value', gender_transform),
             source=ages, legend="Label", line_color="white",
             fill_color=factor_cmap('Label', palette=["blue", "red"], factors=["label1", "label2"]))

然后我的数据在update()方法中构造如下:

>>> ages = pd.DataFrame([['A', 'label1', 0.85], ['B', 'label1', 0.28], ['C', 'label1', 0.88], ['D', 'label1', 0.78], ['A', 'label2', 0.80], ['B', 'label2', 0.18], ['C', 'label2', 0.98], ['D', 'label2', 0.88]], columns=['NameGrp', 'Label', 'Value'])
>>>
  NameGrp   Label  Value
0       A  label1   0.85
1       B  label1   0.28
2       C  label1   0.88
3       D  label1   0.78
4       A  label2   0.80
5       B  label2   0.18
6       C  label2   0.98
7       D  label2   0.88
© www.soinside.com 2019 - 2024. All rights reserved.