python binder_Python中除了matplotlib外还有哪些数据可视化的库?

python可视化,强推bokeh!编辑 惊鸿

公众号 惊鸿的世界

想给算法/数据做个可玩的demo却苦于找不到合适的工具?今天给大家分享的是bokeh,本篇将会手把手教你从零开始做出”在线、交互式、炫酷“的demo。

目录鸟瞰bokeh

三分钟上手bokeh

部署你的bokeh

01鸟瞰bokeh

Bokeh是一款强大的数据可视化工具,具备以下五大优点:灵活,简单到复杂一网打尽,从简单可视化到各种复杂的样式及交互式;

可玩,各类组件帮助你交互式、动态地展示数据,观众一目了然;

可共享,方便发布到网页、网站或者jupyter notebook,区别于pyQT等,网页的形式方便分享并且可以随时随地运行和查看;

高效,使用起来非常高效,非常适合javascript用起来不太顺手的人群(比如我),比起js里的ZingCharts,ECharts等,个人还是倾向于熟悉的python,尤其是现在很多AI算法都是基于python的,所以写完算法不用改动太多就可以用bokeh搭建demo,真香!

强大,支持用户使用javascript开发高级的功能。

接下来,本篇从数据、图形、交互、样式四个角度层层递进,带你快速上手bokeh!

02三分钟上手bokeh

必须强调的是,教程有多么详细可能都比不上自己认真读一下官方手册,但是这篇分享的目的在于作为一个抛砖引玉的作用,帮你快速建立对这套框架的关键元素、流程、细节的认知。

2.1 数据

数据是核心,bokeh支持直接使用list、numpy、pandas(这三种大家都比较熟悉),另外,内部提供ColumnDataSource,掌握了这个接口大部分图就可以画了,优势在于可以实现多个图形之间的数据共享,基本使用方法如下:

from bokeh.plotting import figure

from bokeh.models import ColumnDataSource

source = ColumnDataSource(data={'x_values': [1, 2, 3, 4, 5], 'y_values': [6, 7, 2, 3, 6]})

p = figure()

p.circle(x='x_values', y='y_values', source=source)

除此之外,值得一提的还有网络数据结构以及地图数据结构:网络数据结构的基本元素包括:节点样式(形状、颜色)

节点索引

节点的实际位置 (横纵坐标)

一起来过一遍官方的例程(注释在每一句末尾):

import math

from bokeh.models import Ellipse, GraphRenderer, StaticLayoutProvider

from bokeh.palettes import Spectral8

from bokeh.plotting import figure

N = 8 # 8个节点

node_indices = list(range(N)) # 节点索引从0到7

graph = GraphRenderer()

graph.node_renderer.data_source.add(node_indices, 'index') # 添加索引

graph.node_renderer.data_source.add(Spectral8, 'color') # 添加颜色

graph.node_renderer.glyph = Ellipse(height=0.1, width=0.2, fill_color='color') # 节点样式为椭圆

graph.edge_renderer.data_source.data = dict(start=[0]*N, end=node_indices) # 边, 起点索引对应终点索引即为一条边

circ = [i*2*math.pi/8 for i in node_indices]

x = [math.cos(i) for i in circ] # 节点的横坐标

y = [math.sin(i) for i in circ] # 节点纵坐标

graph_layout = dict(zip(node_indices, zip(x, y)))

graph.layout_provider = StaticLayoutProvider(graph_layout=graph_layout) # 给节点添加位置信息

地图数据结构——数据支持谷歌地图、CartoDB,坐标支持墨卡托投影、经纬度等。这里不展开赘述。

2.2 图形

图形的种类非常齐全,包含线、点、柱、热图、饼图、地图等,如下图:

图形方面bokeh基本类似于matplotlib,图的各种参数可以在figure中配置,例如图的尺寸大小、横纵坐标范围等,一个图可以包含多种图形,图形参数可以查阅手册,关于具体的图形如何绘制建议查阅官方的图库及示范代码。这里讲一个常用但是容易踩坑的点——figure加载图片,注意点包括加载方式、纵坐标形式两点。加载方式。bokeh除了可以绘制二维数据为图像之外,也可以从图片文件加载,如果是本地运行bokeh,可以用本地图片的路径也可以直接用图片的超链接,但是如果是在服务器运行bokeh,会报错找不到本地图片路径,建议把图片上传到图床,然后用图床的超链接。(推荐图床PicGo[3],支持Github图床,亲测有效)

纵坐标形式。区别于matplotlib里的imshow纵坐标索引默认从上到下,bokeh image默认纵坐标索引为从下到上,这就导致二维数据在bokeh和matplotlib绘出的图片会出现上下翻转的现象。但是bokeh从文件或者链接读取图片不会出现上下翻转(此时纵坐标索引依然默认从下到上)。(左matplotlib imshow,右bokeh image)

2.3 交互

何为”可玩“?交互即可玩!本质是三个要素——对象、事件和回调函数。bokeh提供的交互方式可以分为两大类:基本操作,主要是直接在图上进行交互,例如矩形选择、放大缩小、整体移动、鼠标悬停;

组件,例如文本框、按钮、滑条、下拉框、多选框等,这些组件都可以用on_change等函数对应用户自定义的响应,也可以用js_on_change关联javascript函数。

2.4 样式

样式分为三个层次:图形的样式,例如颜色、尺寸等,这些都可以通过图形的API进行设计,可视化好看与否主要由这部分决定。

2. 多图排版,如何放置多个图也很关键,比如并排、网格等,可以使用gridplot()或者layout()快速实现美观的排版。

3. 其他部分的样式,除了这些图片之外,很多情况下我们都需要一些相关的文字说明或者其他内容,bokeh支持将图形嵌入到html当中,也就是说其他内容样式可以借助于html、css等进行灵活设计。具体怎么做我们将在下一个部分讲解。

03部署bokeh

有了bokeh程序之后如何部署到网站呢?方式有很多种,比如jupyter、Flask、Django、Apache等。这里介绍快速、方便的一种形式——将bokeh server部署到binder。什么是binder?简单来讲就是可以加载github上的jupyter notebook。输入github链接、分支等信息就可以在线跑起来jupyter。

那么如何用binder跑起来我们的bokeh server呢,首先从[4]拉取这个模板,红色是我们需要修改的文件,一个是在yml需要声明运行bokeh需要的包,比如bokeh等,另一个就是bokeh的主体——放置所有bokeh相关程序的文件夹。注意:这个仓库里的程序只给了独立的py程序,也就是没有html、css等。

要加入html和css文件,文件结构如下,也就是在bokeh-app/下面除了py文件还加入了templates/,index.html文件当中可以用{{super()}}的方式继承main.py生成的bokeh所有元素。(也有其他形式,比如独立生成script、div等元素,具体可以参照[5])

├── README.md

├── bokeh-app

│ ├── README.md

│ ├── main.py

│ └── templates

│ ├── index.html

│ └── styles.css

├── bokehserverextension.py

├── environment.yml

└── postBuild

最后,只要把{username}和{repo-name}替换成github的用户名和仓库名就可以。

https://mybinder.org/v2/gh/{username}/{repo-name}/master?urlpath=/proxy/5006/bokeh-app

到这里,我们就成功把bokeh部署到binder上啦!

今天的分享就到这里啦,同系列未来会讲解pyQT、matlab GUI等的使用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值