散景互动图例隐藏多个字形 [英] Bokeh Interactive legend hide multiple glyphs

查看:69
本文介绍了散景互动图例隐藏多个字形的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已为我的数据集启用了隐藏图例"选项.当我单击它时,只有一个小节会消失,而其他小节会停留.我不太确定是什么原因引起的.

I've enabled the hide legend option for my dataset. When I click it, only one bar goes off and others stay. I'm not quite sure what is causing the issue.

这是之前和之后的条形图:

Here's the bar plot before and after:

.

这是我的数据:

代码如下:

p = Bar(output,'Programs',values="Averages", group="University",plot_width=600,plot_height=400, title="Comparison")
p.legend.click_policy="hide"
output_file("bar.html")
show(p)

推荐答案

隐藏所有条形图/bokeh.pydata.org/en/latest/docs/user_guide/interaction/legends.html"rel =" nofollow noreferrer>文档:

It is not currently (Bokeh 0.12.6) possible to hide all the bars via legend.click_policy="hide", as stated in the documentation:

交互式图例功能当前可用于每字形"图例.通过指定要自动分组的列创建的图例尚不适用于以下功能

Interactive legend features currently work on "per-glyph" legends. Legends that are created by specifying a column to automatically group do no yet work with the features described below

不过,可以通过添加 MCVE ,它也是可以作为Jupyter笔记本电脑在线获得:

It is, however, possible to hide the bars by adding CheckboxGroup() with CustomJS that hides the bars when the checkboxes are clicked. Below you can see an MCVE, which is also available online as a Jupyter Notebook:

import numpy as np
from bkcharts import Bar, show
from bokeh.layouts import column
from bokeh.models import CheckboxGroup, CustomJS

data = {'University': ['ENGT'] * 3 + ['UBC'] * 3,
        'Averages': [76.5, 79.9, 72.2, 71, 72, 69],
        'Programs': ['CHML', 'CIVL', 'CPEN', 'CHML', 'CIVL', 'CPEN']}

group = "University"
bars = Bar(data=data, label='Programs', values="Averages", group=group,
           plot_width=600, plot_height=400, title="Comparison")

checkboxes = CheckboxGroup(labels=np.unique(data[group]).tolist(),
                           # Make all checkboxes checked by default
                           active=list(range(np.unique(data[group]).size)))
checkboxes.callback = CustomJS(args=dict(bars=bars), code="""

var group = '%s';

function change_bars_visibility(checkbox_name, visible) {
    for (j = 0; j < bars.renderers.length; j++) {
        // Go through rendered objects

        if (bars.renderers[j].attributes.hasOwnProperty('data_source') && 
            bars.renderers[j].data_source.data[group][0] === checkbox_name) {

            // Change the visibility of this rendered object if it belongs to
            // the group determined by the checkbox that was clicked
            bars.renderers[j].visible = visible;
        }
    }
}

for (i = 0; i < cb_obj.labels.length; i++) {
    // Go through checkbox labels
    var checkbox_name = cb_obj.labels[i];

    if (cb_obj.active.indexOf(i) >= 0) {
        // alert(checkbox_name + " is activated");
        change_bars_visibility(checkbox_name, true);
    }
    else {
        // alert(checkbox_name + " is disabled");
        change_bars_visibility(checkbox_name, false);
    }
}
""" % group)

show(column(bars, checkboxes))

这篇关于散景互动图例隐藏多个字形的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆