Bokeh Python Bokeh工具提示文本格式化

文章描述了如何利用Bokeh库在数据可视化中创建图表,实现两个工资系列的对比,并通过HoverTool提供鼠标悬停时详细信息的自定义展示,包括颜色和字体大小。
摘要由CSDN通过智能技术生成

我要实现两个系列的工资比对

鼠标悬停工具提示具体的信息,且还想自定义设置提示内容的颜色及字体大小

苦苦寻找终于找到,原来支持HTML

bokeh就像是图层,可以一层一层的把数据画上去,当悬停提示的时候,可以把所有数据汇聚一起,产生一个新的总的数据,用于悬停提示信息,然后将数据设置为透明的,就看不见了!

我这个菜鸟刚完,也只能想到目前的办法来满足我的需求了。

# 作者:CC
from bokeh.plotting import figure
from bokeh.io import show
from bokeh.models import ColumnDataSource
from bokeh.models.tools import HoverTool

s1_x = [1, 2, 3, 4]
s1_y = [1000, 2000, 3000, 4000]
s1_step_flag = ['S1第1年薪资', 'S1第2年薪资', 'S1第3年薪资', 'S1第4年薪资']

s2_x = [1, 2, 3, 4]
s2_y = [5000, 6000, 7000, 8000]
s2_step_flag = ['S2第1年薪资', 'S2第2年薪资', 'S2第3年薪资', 'S2第4年薪资']

cop_x = s1_x + s2_x
cop_y = s1_y + s2_y
cop_flag = s1_step_flag + s2_step_flag

print(cop_x)
print(cop_y)
data = {
    'cop_x': cop_x,
    'cop_y': cop_y,
    'cop_flag': cop_flag,

}
data1 = {
    's1_x': s1_x,
    's1_y': s1_y,
    's2_x': s2_x,
    's2_y': s2_y,

}
src1 = ColumnDataSource(data1)
src = ColumnDataSource(data)
TOOLS = '''
           pan,             
           box_zoom,
           wheel_zoom,   
           zoom_in, 
           zoom_out, 
           save,reset,
           crosshair,
           '''
# hover = HoverTool(tooltips=[
#     ('(x,y)', '($x{int}, $y{int})'),
#     ('数据', '@cop_flag'),
#     ('index','$index'),
# ])
hover = HoverTool(
    tooltips="""
        <div>
            <span style="font-size: 18px; color: red">数据:</span>
            <span style="font-size: 18px; font-weight: bold;">@cop_flag</span>
        </div>
        <div>
            <span style="font-size: 18px; color: red">(x,y):</span>
            <span style="font-size: 18px; font-weight: bold;">($x{int}, $y{int})</span>
        </div>
    """
                  )
# Create the blank plot
p = figure(plot_height=600, plot_width=600, x_range=[0, 10], y_range=[0, 10000],
           title='标题',
           x_axis_label='X轴',
           y_axis_label='Y轴',
           tools=[hover, TOOLS],

           )
# 设置P1的标题字体及居中方式
p.title.text_font_size = '18pt'
p.title.align = 'center'
p.title.text_color = 'green'

#### 框线
# p.outline_line_width = 7  # 边框线宽
# p.outline_line_alpha = 0.3  # 边框透明度
# p.outline_line_color = 'navy'  # 边框线颜色
# 设置X轴线:标签,线宽,轴线颜色
p.background_fill_color = 'yellow'  # 绘图背景颜色
p.background_fill_alpha = 0.2  # 绘图背景透明度
# x轴字体设置
p.xaxis.axis_label_text_color = 'red'
p.xaxis.axis_label_text_font_style = 'bold'
p.xaxis.axis_label_text_font_size = '19pt'
# y轴字体设置
p.yaxis.axis_label_text_color = 'blue'
p.yaxis.axis_label_text_font_style = 'bold'
p.yaxis.axis_label_text_font_size = '20pt'

# # 轴刻度文本
# p.xaxis.major_label_text_color = "orange"  # x轴刻度文字颜色
# p.xaxis.major_label_orientation = "horizontal"  # x轴刻度文字方向; 'horizontal',水平; 'vertical' 垂直
# 刻度方向及长度
# p.axis.minor_tick_in = 20     # 次要刻度线向内延伸的长度。
# p.axis.minor_tick_out = 20   # 次要刻度线向外延伸的长度

p.line(source=src1, x='s1_x', y='s1_y', line_width=2, line_color="red",
       legend_label='s1系列',
       muted_color='gray',
       muted_alpha=0.1)
p.circle(source=src1, x='s1_x', y='s1_y', fill_color="red", line_color="red", size=10,
         legend_label='s1系列',
         muted_color='gray',
         muted_alpha=0.1)

p.line(source=src1, x='s2_x', y='s2_y', line_width=2, line_color="blue",
       legend_label='s2系列',
       muted_color='gray',
       muted_alpha=0.1)
p.circle(source=src1, x='s2_x', y='s2_y', fill_color="blue", line_color="blue", size=10,
         legend_label='s2系列',
         muted_color='gray',
         muted_alpha=0.1)

p.circle(source=src, x='cop_x', y='cop_y', fill_color="white", line_color="green", size=10, alpha=0.1,
         legend_label='',
         muted_color='gray',
         muted_alpha=0.1)

# 交互式图例点击图例隐藏
p.legend.click_policy = 'mute'  # hide,mute

show(p)
  • 34
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

siasun_chen

你的打赏真帅气

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值