【问题标题】:Bokeh hover tooltips: How do I not see values that are zero on a graph?散景悬停工具提示:如何在图表上看不到零值?
【发布时间】:2018-11-14 13:57:15
【问题描述】:

Pie chart

如上面的饼图图像所示,即使 P1 值为 0,工具提示也会显示 P1 和 P2。当我将鼠标悬停在 P3 上时也是如此。如果值为 0,如何确保悬停工具提示不显示该值?在这种情况下,悬停时不应看到 P1 值,而只能看到 P2 和 P3。

这是我所称的定义:

def create_priority_graph(P1, P2, P3):

    x = {
        'P1': P1,
        'P2': P2,
        'P3': P3
    }
    colors = ["#e84d60", "#f2c707", "#718dbf"]
    data = pd.Series(x).reset_index(name='value').rename(columns={'index':'toolscore'})
    data['angle'] = data['value']/data['value'].sum() * 2*pi
    data['color'] = colors
    p = figure(plot_height=250, plot_width=300, title="Open Issues by priority", toolbar_location=None,tools="hover", tooltips="@toolscore: @value", x_range=(-0.5, 1.0))
    p.wedge(x=0, y=1, radius=0.35,start_angle=cumsum('angle', include_zero=True), end_angle=cumsum('angle'),line_color="white", fill_color='color', legend='toolscore', source=data)
    p.axis.axis_label=None
    p.axis.visible=False
    p.grid.grid_line_color = None

    return p

【问题讨论】:

    标签: python hover tooltip bokeh pie-chart


    【解决方案1】:

    这应该可以解决您的问题。此代码按照 Paul 的建议删除 0 值切片。

    import pandas as pd
    from bokeh.plotting import figure
    from bokeh.io import output_file, show
    from bokeh.models.glyphs import Wedge
    import math
    from bokeh.transform import cumsum
    
    def create_priority_graph(P1, P2, P3):
        x = {
            'P1': P1,
            'P2': P2,
            'P3': P3
        }
        colors = ["#e84d60", "#f2c707", "#718dbf"]
        data = pd.Series(x).reset_index(name='value').rename(columns={'index':'toolscore'})
        data['angle'] = data['value']/data['value'].sum() * 2*math.pi
        data['color'] = colors
        data = data[data.value != 0]
        p = figure(plot_height=250, plot_width=300, title="Open Issues by priority", toolbar_location=None,tools="hover", tooltips="@toolscore: @value", x_range=(-0.5, 1.0))
        p.wedge(x=0, y=1, radius=0.35,start_angle=cumsum('angle', include_zero=True), end_angle=cumsum('angle'),line_color="white", fill_color='color', legend='toolscore', source=data)
        p.axis.axis_label=None
        p.axis.visible=False
        p.grid.grid_line_color = None
        return p
    
    p = create_priority_graph(3, 9, 0)
    
    show(p)
    

    另一种解决方法,它不会删除 0 项的图例:

    import pandas as pd
    from bokeh.plotting import figure
    from bokeh.io import output_file, show
    from bokeh.models.glyphs import Wedge
    import math
    from bokeh.transform import cumsum
    
    def create_priority_graph(P1, P2, P3):
        x = {
            'P1': P1,
            'P2': P2,
            'P3': P3
        }
        for i in x.keys():
            if x[i] == 0:
                x[i] = 0.0001
        colors = ["#e84d60", "#f2c707", "#718dbf"]
        data = pd.Series(x).reset_index(name='value').rename(columns={'index':'toolscore'})
        data['angle'] = data['value']/data['value'].sum() * 2*math.pi
        data['color'] = colors
        p = figure(plot_height=250, plot_width=300, title="Open Issues by priority", toolbar_location=None,tools="hover", tooltips="@toolscore: @value", x_range=(-0.5, 1.0))
        p.wedge(x=0, y=1, radius=0.35,start_angle=cumsum('angle', include_zero=True), end_angle=cumsum('angle'),line_color="white", fill_color='color', legend='toolscore', source=data)
        p.axis.axis_label=None
        p.axis.visible=False
        p.grid.grid_line_color = None
        return p
    
    p = create_priority_graph(3, 9, 0)
    
    show(p)
    

    【讨论】:

    • 非常感谢!它可以根据我的需要完美运行,但我不必使用 math.pi,只是 pi 为我工作
    • 仅供参考,此修复程序也从图例中删除了 0 值变量。有什么办法破解它?
    • 在我的答案中添加了另一个解决方法,它不会从图例中删除变量。
    • 谢谢贾斯珀!
    【解决方案2】:

    由于您没有提供代码,因此最简单的方法可能是在绘图之前从您构建 ColumnDataSource 的任何数据中删除 0 值切片。

    【讨论】:

    • 谢谢,我这里没有使用ColumnDataSource,把代码附加到原帖
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 2021-12-29
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多