交互式图表:Bokeh
绘图空间基本设置
- 创建空间
- notebook中创建
- from bokeh.plotting import figure,show 导入图表绘制、图标展示模块
- from bokeh.io import output_notebook 导入notebook绘图模块
- output_notebook() notebook绘图命令
- 非notebook中创建
- from bokeh.plotting import show,figure,output_file
- output_file → 非notebook中创建绘图空间
- notebook中创建
- 创建图表工具 figure()
- tools 设置工具栏,默认全部显示;
- toolbar_location 工具栏位置:"above","below","left","right"
- x_axis_label / y_axis_label X,Y轴label
- x_range / y_range X,Y轴范围
- title 设置图表title
- p.title.text_color
- p.title.text_font
- p.title.text_font_style
- p.title.background_fill_color
- 颜色设置
- 图表边框线参数设置
- p.outline_line_width = 7 # 边框线宽
- p.outline_line_color = 'white' # 边框线颜色
- p.outline_line_alpha = 0.5 # 边框线透明度
- 设置绘图空间背景
- p.background_fill_color = 'beige' # 绘图空间背景颜色
- p.background_fill_alpha = 0.5 # 绘图空间背景透明度
- 设置外边界背景
- p.border_fill_color = "whitesmoke" # 外边界背景颜色
- p.min_border_left = 80 # 外边界背景 - 左边宽度
- p.min_border_right = 80 # 外边界背景 - 右边宽度
- p.min_border_top = 10 # 外边界背景 - 上宽度
- p.min_border_bottom = 10 # 外边界背景 - 下宽度
- 轴线设置
- p.xaxis.axis_label = 'Temp' # 设置x轴 标签
- p.xaxis.axis_line_color = 'red' # 设置x轴 线宽
- p.xaxis.axis_line_width = 4 # 设置x轴 轴线颜色
- p.yaxis.axis_label = "Pressure" # 设置y轴 标签
- p.yaxis.major_label_text_color = "orange" # 设置y轴 字体颜色
- p.yaxis.major_label_orientation = "vertical" # 设置y轴 字体角度
- p.axis.minor_tick_in = 3 # 刻度往绘图区域内延伸长度
- p.axis.minor_tick_out = 5 # 刻度往绘图区域外延伸长度
- p.xaxis.bounds = (2,4) # 设置轴线范围
- Grid - 格网设置
- p.xgrid.grid_line_color = None 颜色设置,None时则不显示
- p.ygrid.grid_line_color = 'red' #设置网格颜色
- p.ygrid.grid_line_alpha = 0.5 #设置网格透明度
- p.ygrid.grid_line_dash = [3,6] #设置网格虚线
- p.xgrid.minor_grid_line_color = 'navy' #设置网格次轴线
- p.xgrid.minor_grid_line_alpha = 0.5
- p.ygrid.band_fill_alpha = 0.1 #设置网格透明度
- p.ygrid.band_fill_color = 'green'
- p.grid.bounds = (-1,1) # 设置填充边界
- Legend - 图例设置
- p.legend.location
- 设置图例位置:"top_left"、"top_center"、"top_right" (the default)、"center_right"、"bottom_right"、"bottom_center"
# "bottom_left"、"center_left"、"center"
- 设置图例位置:"top_left"、"top_center"、"top_right" (the default)、"center_right"、"bottom_right"、"bottom_center"
- p.legend.orientation;#设置图例排列方向:"vertical" (默认)or "horizontal"
- p.legend.label_text_font = "times" ;#设置图例文字
- p.legend.label_text_font_style = "italic" # 斜体 ;#设置图例风格
- p.legend.label_text_color = "black" ;#设置图例颜色
- p.legend.label_text_font_size = '12pt' ;#设置图例字体大小
- p.legend.border_line_width = 2 ;#设置图例外边线宽度
- p.legend.border_line_color = "black" ;#设置图例外边线颜色
- p.legend.border_line_alpha = 0.5 ;#设置图例外边线透明度
- p.legend.location
图表辅助参数设置
- 辅助标注 - 线
- 导入Span模块 from bokeh.models.annotations import Span
- location=1 # 设置位置,对应坐标值
- dimension = 'width' # 设置方向,width为横向,height为纵向
- line_color = 'olive',line_width = 4 # 设置线颜色、线宽
- p.add_layout(upper) 绘制辅助线upper
- 辅助标注 - 矩形
- 导入BoxAnnotation模块 from bokeh.models.annotations import BoxAnnotation
- top=0.6, bottom=-0.3, left=7, right=12, # 设置矩形四边位置
- fill_alpha=0.1, fill_color='navy' # 设置透明度、颜色
- p.add_layout(upper) 绘制辅助矩形
- 绘图注释
- 导入Label模块 from bokeh.models.annotations import Label
- x=5,y=7 # 标注注释位置
- x_offset = 20 # x偏移,同理y_offset
- text = 'Second Point' # 注释内容
- text_font_size = '10pt' # 字体大小
- border_line_color = 'red'
- background_fill_color = 'gray'
- background_fill_alpha = 0.5
- p.add_layout(label) 绘制注释
- 注释箭头
- from bokeh.models.annotations import Arrow
- from bokeh.models.arrow_heads import OpenHead, NormalHead, VeeHead # 三种箭头类型
- p.add_layout() 绘制箭头
- show(p)
- 调色盘
- import bokeh.palettes as bp
- from bokeh.palettes import brewer
- bp.__palettes__ 所有调色板名称
- bp.Blues 蓝色调色盘颜色
- colori = brewer['YlGn'][n 调色盘解析为n个颜色
各类图表绘制
- 散点图
- p.circle(x,y) 设置基本参数
- color 是线+填充的颜色,可分别单独设置
- 设置不同大小、颜色和透明度
- 设置不同符号
- 折线图
- from bokeh.models import ColumnDataSource 导入ColumnDataSource模块
- source = ColumnDataSource(data=df) 转化为ColumnDataSource对象
- p.line(x,y,source) 设置x,y值, source → 数据源,绘制单线图
- p.multi_line(x1,x2,y1,y2) 设置x,y的值,其它参数可同时设置,也可分别设置,传入列表
- 面积图
- 单维度面积图
- s.iloc[0] = 0
- s.iloc[-1] = 0
- p.patch(x,y) 把所有点连接成一个闭合面
- 面积堆叠图
- 单维度面积图
- 柱状图
- 单系列柱状图
- 竖向 p.hbar()
- x=[1,2,3],width = 0.5,bottom = 0,top = [1.2,2.5,3.7], # x:横轴坐标,width:宽度,bottom:底高度,top:顶高度
- color = ['red','green','blue'],alpha = 0.5, # 整体颜色设置,也可单独设置 → color="firebrick"
- line_width = 2,line_color = 'black',line_alpha = 0.5,line_dash = [6,4], # 单独设置线参数
- fill_color = 'red',fill_alpha = 0.5) # 单独设置填充颜色参数
- show(p)
- 横向 p.vbar()
- y=[1,2,3],height = 0.5,right = [1.2,2.5,3.7],left = 0, # y:纵轴坐标,height:厚度,left:左边最小值,right:右边最大值
- color = ['red','green','blue'],alpha = 0.5
- 分类设置标签
- 标签名以列表形式传入
- 竖向 p.hbar()
- 多系列柱状图
- 分别绘制
- 单系列柱状图
- 堆叠图
- p.vbar_stack()
- years, # 设置堆叠值,这里source中包含了不同年份的值,years变量用于识别不同堆叠层
- x='fruits', # 设置x坐标
- source=source,需转换为ColumnDataSource对象
- 直方图
- np.histogram(data, bins=10, range=None, weights=None, density=None)
- 返回值1 - hist:每个箱子的统计值(top)
- 返回值2 - edges:每个箱子的位置坐标,这里n个bins将会有n+1个edges
- p.quad() 绘图
- top=hist, bottom=0, left=edges[:-1], right=edges[1:], # 分别代表每个柱子的四边值
- np.histogram(data, bins=10, range=None, weights=None, density=None)
绘图表达进阶操作
- 轴线标签设置
- 设置字符串:p.figure(x_range = name)
- 时间序列设置:p = figure(x_axis_type='datetime')
- 设置对数坐标轴:p.figure(y_axis_type='log')
- 浮动设置 jitter
- 多图表设置
- from bokeh.layouts import gridplot
- 分别绘制不同的figure图表
- p = gridplot([[s1, s2, s3]]) 组合图表
ToolBar工具栏设置
- 位置设置
- 移动、放大缩小、存储、刷新
- 选择
- TOOLS = '''
box_select,lasso_select,
reset
'''
- TOOLS = '''
- 提示框、十字线
- from bokeh.models import HoverTool
- hover = HoverTool(tooltips=[
- ("index", "$index"),
- ("(x,y)", "($x, $y)"),
- ("A", "@A"),
- ("B", "@B"),
- ("type", "@type"),
- ("color", "@color"),
- # 设置标签显示内容
- # $index:自动计算 → 数据index
- # $x:自动计算 → 数据x值
- # $y:自动计算 → 数据y值
- # @A:显示ColumnDataSource中对应字段值
- tools=[hover,'box_select,reset,wheel_zoom,pan,crosshair'] 注意书写方式
- from bokeh.models import HoverTool
其他交互工具设置
- p.legend.click_policy="hide" 设置图例,点击隐藏
- p.legend.click_policy="mute" 设置图例,点击消隐
- muted_color=color, 设置消隐后的显示颜色
- muted_alpha=0.2 设置消隐后的透明度
- 图表分页
- from bokeh.models.widgets import Panel, Tabs 导入panel,tabs模块
- tab1 = Panel(child=p1, title="circle")
- child → 页码
- title → 分页名称
- tabs = Tabs(tabs=[ tab1, tab2 ]) 设置分页图表