百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

手把手教你数据可视化

itomcoil 2024-12-31 12:24 19 浏览

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

目录

  1. 鸟瞰bokeh
  2. 三分钟上手bokeh
  3. 部署你的bokeh

鸟瞰bokeh

Bokeh是一款强大的数据可视化工具,具备以下五大优点:

  1. 灵活,简单到复杂一网打尽,从简单可视化到各种复杂的样式及交互式;
  2. 可玩,各类组件帮助你交互式、动态地展示数据,观众一目了然;
  3. 可共享,方便发布到网页、网站或者jupyter notebook,区别于pyQT等,网页的形式方便分享并且可以随时随地运行和查看;
  4. 高效,使用起来非常高效,非常适合javascript用起来不太顺手的人群(比如我),比起js里的ZingCharts,ECharts等,个人还是倾向于熟悉的python,尤其是现在很多AI算法都是基于python的,所以写完算法不用改动太多就可以用bokeh搭建demo,真香!
  5. 强大,支持用户使用javascript开发高级的功能。

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


三分钟上手bokeh

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

数据是核心,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)

除此之外,值得一提的还有网络数据结构以及地图数据结构,网络数据结构的基本元素包括:

  1. 节点样式(形状、颜色)
  2. 节点索引
  3. 节点的实际位置 (横纵坐标)

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

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,坐标支持墨卡托投影、经纬度等。这里不展开赘述。

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

图形方面bokeh基本类似于matplotlib,图的各种参数可以在figure中配置,例如图的尺寸大小、横纵坐标范围等,一个图可以包含多种图形,图形参数可以查阅手册,关于具体的图形如何绘制建议查阅官方的图库及示范代码。这里讲一个常用但是容易踩坑的点——figure加载图片,注意点包括加载方式、纵坐标形式两点。

  1. 加载方式。bokeh除了可以绘制二维数据为图像之外,也可以从图片文件加载,如果是本地运行bokeh,可以用本地图片的路径也可以直接用图片的超链接,但是如果是在服务器运行bokeh,会报错找不到本地图片路径,建议把图片上传到图床,然后用图床的超链接。(推荐图床PicGo[3],支持Github图床,亲测有效)
  2. 纵坐标形式。区别于matplotlib里的imshow纵坐标索引默认从上到下,bokeh image默认纵坐标索引为从下到上,这就导致二维数据在bokeh和matplotlib绘出的图片会出现上下翻转的现象。但是bokeh从文件或者链接读取图片不会出现上下翻转(此时纵坐标索引依然默认从下到上)。(左matplotlib imshow,右bokeh image)

何为”可玩“?交互即可玩!本质是三个要素——对象、事件和回调函数。bokeh提供的交互方式可以分为两大类:

  1. 基本操作,主要是直接在图上进行交互,例如矩形选择、放大缩小、整体移动、鼠标悬停;
  2. 组件,例如文本框、按钮、滑条、下拉框、多选框等,这些组件都可以用on_change等函数对应用户自定义的响应,也可以用js_on_change关联javascript函数。

样式分为三个层次:

  • 图形的样式,例如颜色、尺寸等,这些都可以通过图形的API进行设计,可视化好看与否主要由这部分决定。
  • 多图排版,如何放置多个图也很关键,比如并排、网格等,可以使用gridplot()或者layout()快速实现美观的排版。
  • 其他部分的样式,除了这些图片之外,很多情况下我们都需要一些相关的文字说明或者其他内容,bokeh支持将图形嵌入到html当中,也就是说其他内容样式可以借助于html、css等进行灵活设计。具体怎么做我们将在下一个部分讲解。

部署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等的使用。


参考文献

[1] https://bokeh.org/

[2] https://mybinder.org/

[3] https://github.com/Molunerfinn/PicGo

[4] https://github.com/binder-examples/bokeh

[5] https://github.com/bokeh/bokeh/tree/branch-2.3/examples/app/gapminder

相关推荐

PS小技巧 调整命令,让人物肤色变得更加白皙 #后期修图

我们来看一下如何去将人物的皮肤变得更加的白皙。·首先选中图层,Ctrl键加J键复制一层。·打开这里的属性面板,选择快速操作删除背景,这样就会将人物进行单独的抠取。·接下来在上方去添加一个黑白调整图层,...

把人物肤色提亮的方法和技巧

PS后期调白肤色提亮照片的方法。一白遮百丑,所以对于Photoshop后期来说把人物肤色调白是一项非常重要的任务。就拿这张素材图片来说,这张素材图片人脸的肤色主要偏红、偏黄,也不够白皙,该怎样对它进行...

《Photoshop教程》把美女图片调成清爽色彩及润肤技巧

关注PS精品教程,每天不断更新~~室内人物图片一般会偏暗,人物脸部、肤色及背景会出现一些杂点。处理之前需要认真的给人物磨皮及美白,然后再整体润色。最终效果原图一、用修补工具及图章工具简单去除大一点的黑...

PS后期对皮肤进行美白的技巧

PS后期进行皮肤美白的技巧。PS后期对皮肤进行美白的技巧:·打开素材图片之后直接复制原图。·接下来直接点击上方的图像,选择应用图像命令。·在通道这里直接选择红通道,混合这里直接选择柔光,然后点击确定。...

493 [PS调色]调模特通透肤色

效果对比:效果图吧:1、光位图:2、拍摄参数:·快门:160;光圈:8;ISO:1003、步骤分解图:用曲线调整图层调出基本色调。用可选颜色调整图层调整红色、黄色、白色和灰色4种颜色的混合比例。用色彩...

先选肤色再涂面部,卡戴珊的摄影师透露:为明星拍完照后怎么修图

据英国媒体12月17日报道,真人秀明星金·卡戴珊终于承认,她把女儿小北P进了家族的圣诞贺卡,怪不得粉丝们都表示这张贺卡照得非常失败。上周,这位39岁的女星遭到了一些粉丝针对这张照片的批评,她于当地时间...

如何在PS中运用曲线复制另一张照片的色调

怎样把另一张作品的外观感觉,套用到自己的照片上?单靠肉眼来猜,可能很不容易,而来自BenSecret的教学,关键是在PS使用了两个工具,让你可以准确比较两张照片的曝光、色调与饱和度,方便你调整及复制...

PS在LAB模式下调出水嫩肤色的美女

本PS教程主要使用Photoshop使用LAB模式调出水嫩肤色的美女,教程调色比较独特。作者比较注重图片高光部分的颜色,增加质感及肤色调红润等都是在高光区域完成。尤其在Lab模式下,用高光选区调色后图...

在Photoshop图像后期处理中如何将人物皮肤处理得白皙通透

我们在人像后期处理中,需要将人物皮肤处理的白皙通透,处理方法很多,大多数都喜欢使用曲线、磨皮等进行调整,可以达到亮但是不透,最终效果往往不是很好,今天就教大家一种如何将任务皮肤处理得白皙通透,希望能帮...

PS调色自学教程:宝宝照片快速调通透,简单实用!

PS调色自学教程:宝宝照片快速调通透。·首先复制图层,然后选择进入ACR滤镜,选择曲线锁定照片的亮部,也就高光位置,其他部位补亮一点,尤其是阴影的部位补亮多一些,让画面的层次均匀一点。·然后回到基本项...

【干货】如何利用PS进行人物美化

人物图像美化在Photoshop中非常常用,Photoshop作为一款功能强大的图像处理软件,不仅可以对人像进行基本的调色、美化和修复等处理,还可以改变人物的线条和幅度,如调整脸部器官和脸型的大小、调...

教大家一种可以快速把肤色处理均匀的方法@抖音短视频

快速把肤色处理均匀的方法。今天教大家一种可以快速把肤色处理均匀的方法。像这张照片整体肤色走紫红色,但是局部偏黄缘处理起来非常的麻烦。其实我们只需要新建空白图层,图层混合模式更改为颜色,再选择画笔工具把...

PS调色教程 利用RAW调出干净通透的肤色

要么不发,要么干货。后期教程来噜~用RAW调出干净通透的肤色。这次终于不会原片比PS后好看了吧。如果你依然这么觉得,请不要残忍的告诉我这个事实,泪谢TAT)附送拍摄花絮,感谢各位的支持更多风格请关注m...

photoshop后期皮肤变白的技巧

PS后期皮肤变白的技巧。1.PS后期让皮肤变白的方法有很多种,接下来教你一种非常简单容易上手的方法。2.打开素材图片之后,直接在小太极下拉框的位置添加一个纯色调整图层,颜色设置一个纯白色,点击...

Photoshop调出人物的淡雅粉嫩肤色教程

本教程主要使用Photoshop调出人物的淡雅粉嫩肤色教程,最终的效果非常的通透迷人,下面让我们一起来学习.出自:86ps效果图:原图:1、打开原图复制一层。2、用Topaz滤镜磨皮(点此下载)。3、...