散景悬停工具提示:如何在图表上看不到零值?
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)
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)