一个交互式可视化Python库——Bokeh

本篇为《Python数据可视化实战》第十篇文章,我们一起学习一个交互式可视化Python库——Bokeh。

Bokeh基础

Bokeh是一个专门针对Web浏览器的呈现功能的交互式可视化Python库。这是Bokeh与其它可视化库最核心的区别。

Bokeh绘图步骤

①获取数据

②构建画布figure()

③添加图层,绘图line,circle,square,scatter,multi_line等;参数co
lor,legend

④自定义视觉属性

⑤选择性展示折线数据,建立复选框激活显示,复选框(checkbox)

导入库和数据

import numpy as np
import bokeh
from bokeh.layouts import gridplot
from bokeh.plotting import figure, output_file, show

图表实例

1.散点图

import numpy as np
import bokeh
from bokeh.layouts import gridplot
from bokeh.plotting import figure, output_file, show
# output_file("patch.html")  #输出网页形式
p = figure(plot_width=100, plot_height=100)
#数据
N=9
x=np.linspace(-2,2,N)
y=x**2
sizes=np.linspace(10,20,N)
xpts=np.array([-0.09,-0.12,0.0,0.12,0.09])
ypts=np.array([-0.1,0.02,0.1,0.02,-0.1])

p=figure(title="annular_wedge")
p.annular_wedge(x,y,10,20,0.3,4.1,color="#8888ee",inner_radius_units="screen",outer_radius_units="screen")
# Set to output the plot in the notebook
output_notebook()
show(p)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hc8jJ818-1584427176811)(https://my-wechat.oss-cn-beijing.aliyuncs.com/bokeh_plot%20(1)]_20200316133935.png)

2.多分类的散点图

from bokeh.sampledata.iris import flowers
from bokeh.plotting import figure
from bokeh.io import show, output_notebook
#配色
colormap={'setosa':'red','versicolor':'green','virginica':'blue'}
colors=[colormap[x] for x in flowers['species']]
#画布
p=figure(title='Tris Morphology')
#绘图
#flowers['petal_length']为x,flowers['petal_width']为y,fill_alpha=0.3为填充透明度
p.circle(flowers['petal_length'],flowers['petal_width'],color=colors,fill_alpha=0.3,size=10)   
#显示
output_notebook()
show(p)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4oITm878-1584427176814)(https://my-wechat.oss-cn-beijing.aliyuncs.com/bokeh_plot%20(2)]_20200316133941.png)

3.数值大小以散点图大小来表示

import numpy as np
from bokeh.sampledata.iris import flowers
from bokeh.plotting import figure
from bokeh.io import show, output_notebook
x=[1,2,3,4]
y=[5,7,9,12]
sizes=np.array(y)+10  #气泡大小
p=figure(title='bubble chart')
p=figure(plot_width=300,plot_height=300)
p.scatter(x,y,marker="circle",size=sizes,color="navy")
output_notebook()
show(p)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qJ6CHN2Q-1584427176816)(https://my-wechat.oss-cn-beijing.aliyuncs.com/bokeh_plot%20(10)]_20200316134035.png)

4.折线图line

from bokeh.layouts import column, gridplot
from bokeh.models import BoxSelectTool, Div
from bokeh.plotting import figure
from bokeh.io import show, output_notebook
# 数据
x = [1, 2, 3, 4, 5, 6, 7]
y = [6, 7, 2, 4, 5, 10, 4]
# 画布:坐标轴标签,画布大小
p = figure(title="line example", x_axis_label='x', y_axis_label='y', width=400, height=400)
# 画图:数据、图例、线宽
p.line(x, y, legend="Temp.", line_width=2)  # 折线图
# 显示
output_notebook()
show(p)
``` 
![](https://my-wechat.oss-cn-beijing.aliyuncs.com/bokeh_plot%20(11)_20200316134039.png)

 
5.同时展示不同函数,以散点和折线方式

数据,同时展示不同函数,以散点和折线方式

x = [0.1, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0]
y0 = [i2 for i in x]
y1 = [10
i for i in x]
y2 = [10**(i**2) for i in x]

创建画布

p = figure(
    tools=“pan,box_zoom,reset,save”,
    y_axis_type=“log”, title=“log axis example”,
    x_axis_label=‘sections’, y_axis_label=‘particles’,
    width=700, height=350)  # y轴类型:log指数或linear线性

增加图层,绘图

p.line(x, x, legend=“y=x”)
p.circle(x, x, legend=“y=x”, fill_color=“white”, size=8)
p.line(x, y0, legend=“y=x^2”, line_width=3)
p.line(x, y1, legend=“y=10^x”, line_color=“red”)
p.circle(x, y1, legend=“y=10^x”, fill_color=“red”, line_color=“red”, size=6)
p.line(x, y2, legend=“y=10x2”, line_color=“orange”, line_dash=“4 4”)

显示

output_notebook()
show§



![](https://my-wechat.oss-cn-beijing.aliyuncs.com/bokeh_plot%20(12)_20200316134107.png)

6.不同颜色不同形状表示不同类别的事物

数据,同时展示不同函数,以散点和折线方式

x = [0.1, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0]
y0 = [i2 for i in x]
y1 = [10
i for i in x]
y2 = [10**(i**2) for i in x]

创建画布

p = figure(
    tools=“pan,box_zoom,reset,save”,
    y_axis_type=“log”, title=“log axis example”,
    x_axis_label=‘sections’, y_axis_label=‘particles’,
    width=700, height=350)  # y轴类型:log指数或linear线性

增加图层,绘图

p.line(x, x, legend=“y=x”)
p.circle(x, x, legend=“y=x”, fill_color=“white”, size=8)
p.line(x, y0, legend=“y=x^2”, line_width=3)
p.line(x, y1, legend=“y=10^x”, line_color=“red”)
p.circle(x, y1, legend=“y=10^x”, fill_color=“red”, line_color=“red”, size=6)
p.line(x, y2, legend=“y=10x2”, line_color=“orange”, line_dash=“4 4”)

显示

output_notebook()
show§


![](https://my-wechat.oss-cn-beijing.aliyuncs.com/bokeh_plot_20200316134124.png)

7.不同函数设置创建复选框库选择性显示

x = np.linspace(0, 4 * np.pi, 100)

画布

p = figure()

折线属性

props = dict(line_width=4, line_alpha=0.7)

绘图3条函数序列

l0 = p.line(x, np.sin(x), color=Viridis3[0], legend=“Line 0”, **props)
l1 = p.line(x, 4 * np.cos(x), color=Viridis3[1], legend=“Line 1”, **props)
l2 = p.line(x, np.tan(x), color=Viridis3[2], legend=“Line 2”, **props)

复选框激活显示,复选框(checkbox),三个函数序列可选择性展示出来

checkbox = CheckboxGroup(labels=[“Line 0”, “Line 1”, “Line 2”],
                         active=[0, 1, 2], width=100)

checkbox.callback = CustomJS(args=dict(l0=l0, l1=l1, l2=l2, checkbox=checkbox), code="""
l0.visible = 0 in checkbox.active;
l1.visible = 1 in checkbox.active;
l2.visible = 2 in checkbox.active;
“”")

添加图层

layout = row(checkbox, p)
output_notebook()

显示

show(layout)


![](https://my-wechat.oss-cn-beijing.aliyuncs.com/bokeh_plot%20(8)_20200316134133.png)

 
8.收盘价的时序图走势和散点图

import numpy as np
from bokeh.plotting import figure
from bokeh.io import show, output_notebook
from bokeh.layouts import row  #row()的作用是将多个图像以行的方式放到同一张图中
from bokeh.palettes import Viridis3
from bokeh.models import CheckboxGroup, CustomJS  #CheckboxGroup 创建复选框库

数据

aapl = np.array(AAPL[‘adj_close’])
aapl_dates = np.array(AAPL[‘date’], dtype=np.datetime64)
window_size = 30
window = np.ones(window_size)/float(window_size)
aapl_avg = np.convolve(aapl, window, ‘same’)

画布

p = figure(width=800, height=350, x_axis_type=“datetime”)

图层

p.circle(aapl_dates, aapl, size=4, color=‘darkgrey’, alpha=0.2, legend=‘close’) #散点图
p.line(aapl_dates, aapl_avg, color=‘red’, legend=‘avg’) #折线时序图

自定义视觉属性

p.title.text = “AAPL One-Month Average”
p.legend.location = “top_left”
p.grid.grid_line_alpha=0
p.xaxis.axis_label = ‘Date’
p.yaxis.axis_label = ‘Price’
p.ygrid.band_fill_color=“gray”
p.ygrid.band_fill_alpha = 0.1
p.legend.click_policy=“hide” # 点击图例显示隐藏数据

显示结果

output_notebook()
show§


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-74saxLsP-1584427176824)(https://my-wechat.oss-cn-beijing.aliyuncs.com/bokeh_plot%20(9)]_20200316134143.png)
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWdrci5jbi1iai51ZmlsZW9zLmNvbS9iNDY1ODQ0Zi1lYjM2LTQzODgtYWRkZS0zY2Q1YzhjNzI5MTQucG5n?x-oss-process=image/format,png)

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值