散景悬停工具提示:如何在图表上看不到零值?

Bokeh hover tooltips: How do I not see values that are zero on a graph?

Pie chart

如上图所示,工具提示显示 P1 和 P2,即使 P1 的值为 0。当我将鼠标悬停在 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

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

这应该可以解决您的问题。此代码按照 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)