开始先一波标准导入
from bokeh.io import output_notebook, show
from bokeh.plotting import figure
output_notebook()
画布设置
# create a new plot with a title
p = figure(plot_width=400, plot_height=400)
p.outline_line_width = 7
p.outline_line_alpha = 0.3
p.outline_line_color = "navy"
p.circle([1,2,3,4,5], [2,5,8,2,7], size=10)
show(p)
针对画布设置可以通过属性.outline_line_width
, .outline_line_alpha
, .outline_line_color
等进行配置。
类似的还有.background_fill_color
, .border_fill_color
等等
总而言之, 针对画布的设置, 都通过figure
下的参数进行配置。
标记符号设置
p = figure(plot_width=400, plot_height=400)
# keep a reference to the returned GlyphRenderer
r = p.circle([1,2,3,4,5], [2,5,8,2,7])
r.glyph.size = 50
r.glyph.fill_alpha = 0.2
r.glyph.line_color = "firebrick"
r.glyph.line_dash = [5, 1]
r.glyph.line_width = 2
show(p)
针对标记的设置, 就是配置当前标记下的.glyph
对象下的属性, 如上例子配置标记的大小就使用r.glyph.size = 50
; 配置标记边缘虚线样式就使用r.glyph.line_dash = [5, 1]
, 意思是每6个单位的边缘线, 有一个单位为透明的。
总而言之, 与画布设置如出一辙, 设置标记就使用标记下的配置项。
选择与非选择下的动态展示
p = figure(plot_width=400, plot_height=400, tools="tap", title="Select a circle")
renderer = p.circle([1, 2, 3, 4, 5], [2, 5, 8, 2, 7], size=50,
# set visual properties for selected glyphs
selection_color="firebrick",
# set visual properties for non-selected glyphs
nonselection_fill_alpha=0.2,
nonselection_fill_color="grey",
nonselection_line_color="firebrick",
nonselection_line_alpha=1.0)
show(p)
既然我们选择的是图片上的标记符号, 所以随着选择的改变, 展示的变化也是标记符号本身。
按照一贯的套路, 这种配置也应该配入“标记符号”。
上一段代码展示的配置方法是在标记符号初始化的时候, 以参数的形式进行配置。
我们也可以在初始化之后, 再配置, 如下一段代码:
from bokeh.models.glyphs import Circle, Square
p = figure(plot_width=400, plot_height=400, tools="tap", title="Select a circle")
renderer = p.circle([1, 2, 3, 4, 5], [2, 5, 8, 2, 7], size=50)
renderer.selection_glyph = Circle(fill_alpha = 1, fill_color="yellow", line_color = None)
renderer.nonselection_glyph = Circle(fill_alpha = 0.2, fill_color = "green", line_color = "yellow")
show(p)
悬停动态响应
from bokeh.models.tools import HoverTool
from bokeh.sampledata.glucose import data
subset = data.loc['2010-10-06']
x, y = subset.index.to_series(), subset['glucose']
# Basic plot setup
p = figure(width=600, height=300, x_axis_type="datetime", title='Hover over points')
p.line(x, y, line_dash="4 4", line_width=1, color='gray')
cr = p.circle(x, y, size=20,
fill_color="grey", hover_fill_color="firebrick",
fill_alpha=0.05, hover_alpha=0.3,
line_color=None, hover_line_color="white")
p.add_tools(HoverTool(tooltips=None, renderers=[cr], mode='hline'))
show(p)
上面案例的本质是:
1、画布准备与之前的样例一样
2、作图时, 首先画一条虚线, 固定的, 没有动态反应
3、在与虚线相同的位置上, 再画一层很透明的圆形标记。 这层圆形标记会对悬浮指针作出反应。
对悬停起反应的标记符号为:
cr = p.circle(x, y, size=20,
fill_color="grey", hover_fill_color="firebrick",
fill_alpha=0.05, hover_alpha=0.3,
line_color=None, hover_line_color="white")
左侧没有hover开头的配置项即普通状态下的样式, 右侧hover开头的配置项即被悬停指定标记所展现的样式。
坐标轴
坐标轴的样式设计, 也是在配置画布的时候进行配置。 比如:
p.xaxis.axis_label = "Temperature"
p.axis.major_label_text_color = "orange"
坐标轴参数
针对坐标轴的参数很多,不过通过配置项的前缀, 我们可以将他们大致归类:
-
axis 坐标轴(线)配置项, 例如:
axis_line_width
-
axis_label 坐标轴(文字)配置项, 例如:
axis_label_text_color
,axis_label_standoff
-
major_label 坐标轴(文字)配置项, 例如:
major_label_text_font_size
,major_label_orientation
-
major_tick 坐标轴(线)配置项, 例如:
major_tick_line_dash
,major_tick_in
,major_tick_out
-
minor_tick 坐标轴(线)配置项, 例如:
minor_tick_line_width
,minor_tick_in
,minor_tick_out
from math import pi
p = figure(plot_width=400, plot_height=400)
p.x([1,2,3,4,5], [2,5,8,2,7], size=10, line_width=2)
p.xaxis.major_label_orientation = pi/4
p.yaxis.major_label_orientation = "vertical"
show(p)
p = figure(plot_width=400, plot_height=400)
p.asterisk([1,2,3,4,5], [2,5,8,2,7], size=12, color="olive")
# change just some things about the x-axes
p.xaxis.axis_label = "Temp"
p.xaxis.axis_line_width = 3
p.xaxis.axis_line_color = "red"
# change just some things about the y-axes
p.yaxis.axis_label = "Pressure"
p.yaxis.major_label_text_color = "orange"
p.yaxis.major_label_orientation = "vertical"
# change things on all axes
p.axis.minor_tick_in = -3
p.axis.minor_tick_out = 6
show(p)
总而言之, 以p.axis开头的配置, 是针对横竖坐标同时作用的配置; 以p.xaxis开头的配置都是针对x轴进行的配置;同样的, 以p.yaxis开头的配置都是针对y轴的配置。
再之后的配置项,以axis开头的都是针对坐标轴本身的配置。 比如p.xaxis.axis_label
x轴的标题。带有label的标签是针对坐标轴刻度的配置项,比如p.yaxis.major_label_orientation
y坐标刻度的朝向。
刻度配置项
from math import pi
from bokeh.sampledata.glucose import data
week = data.loc['2010-10-01':'2010-10-08']
p = figure(x_axis_type="datetime", title="Glocose Range", plot_height=350, plot_width=800)
p.xaxis.formatter.days = '%m/%d/%Y'
p.xaxis.major_label_orientation = pi/3
p.line(week.index, week.glucose)
show(p)
上面列子可以看出, 时间戳时间默认为月份/日期,但我们可以通过配置格式p.xaxis.formatter.days = '%m/%d/%Y'
使得x轴的时间显示为月份/日期/年份。 同时由于配置项p.xaxis.major_label_orientation = pi/3
使得时间刻度的显示倾斜1/3个π的角度。
from bokeh.models import NumeralTickFormatter
p = figure(plot_height=300, plot_width=800)
p.circle([1,2,3,4,5], [2,5,8,2,7], size=10)
p.xaxis.formatter = NumeralTickFormatter(format="0.0%")
p.yaxis.formatter = NumeralTickFormatter(format="$0.00")
show(p)
上例子中, x, y 轴的刻度都是数字, 通过NumeralTickFormatter
定义其格式。
网格的设置
p = figure(plot_width=400, plot_height=400)
p.circle([1,2,3,4,5], [2,5,8,2,7], size=10)
# change just some things about the x-grid
p.xgrid.grid_line_color = None
# change just some things about the y-grid
p.ygrid.grid_line_alpha = 0.5
p.ygrid.grid_line_dash = [6, 4]
show(p)
p.xgrid.grid_line_color = None
意味着x轴刻度延长方向、竖向网格线不显示
p.ygrid.grid_line_alpha = 0.5
意味着y轴刻度延长方向,横向网格线半透明
p.ygrid.grid_line_dash = [6, 4]
意味着y轴刻度延长方向,横向网格线程虚线形式
p = figure(plot_width=400, plot_height=400)
p.circle([1,2,3,4,5], [2,5,8,2,7], size=10)
# change just some things about the x-grid
p.xgrid.grid_line_color = None
# change just some things about the y-grid
p.ygrid.band_fill_alpha = 0.1
p.ygrid.band_fill_color = "navy"
show(p)
p.xgrid.grid_line_color = None
x轴刻度延长线、竖向网格线不显示
p.ygrid.band_fill_alpha = 0.1
y轴刻度延长线、向横向网格填充颜色,0.1的透明度
p.ygrid.band_fill_color = "navy"
填充的颜色为深蓝色
下一篇: 三、数据源的定义与转化