Bokeh 这可视化图表做的,也太好看了吧!

简介: Python交互式可视化库Bokeh在现代web浏览器中支持大型数据集的高性能可视化表示。Bokeh 的目标是使用 D3.js 样式提供优雅,简洁新颖的图形化风格,同时提供大型数据集的高性能交互功能。

Python交互式可视化库Bokeh在现代web浏览器中支持大型数据集的高性能可视化表示。Bokeh 的目标是使用 D3.js 样式提供优雅,简洁新颖的图形化风格,同时提供大型数据集的高性能交互功能。

Boken 可以快速的创建交互式的绘图,仪表盘和数据应用。绘图界面以两个主要组件为中心--数据和符号

开始前,先欣赏下bokeh图形之美:


化学元素周期表

8.png

物理洛伦茨吸引子



9.png

数学正弦曲线

10.png


生物细菌极坐标图


11.png

地理德克萨斯州


12.png

美术颜色滑块图


13.png



用bokeh绘图交互图形的基本步骤:

  1. 准备一些数据
    Python列表,NumPy数组,panda的数据筐等准备数据
  2. 创建一个新的情节
  3. 使用可视渲染器塑造数据
  4. 指定在何处生成输出
  5. 显示或保存结果


from bokeh.plotting import figure
from bokeh.io import output_file, show
x = [1, 2, 3, 4, 5]                       # Step 1
y = [6, 7, 2, 4, 5]
p = figure(title="simple line example",   # Step 2 
           x_axis_label='x',
           y_axis_label='y')
p.line(x, y, legend="Temp.", line_width=2)# Step 3
output_file("lines.html")                 # Step 4 
show(p)                                   # Step 5

14.png


bokeh接口


Charts: 高层接口,以简单的方式绘制复杂的统计图

Plotting: 中层接口,用于组装图形元素

Models: 底层接口,为开发者提供了最大的灵活性

本次实用中层接口 boken.plotting绘制图形


数据准备


Python列表和NumPy数组等数据序列来将数据传递给bokeh。bokeh自动将这些列表转换为ColumnDataSource对象。

你也可以手动操作:


import numpy as np
import pandas as pd
df = pd.DataFrame(np.array([[33.9,4,65, 'US'],
                            [32.4,4,66, 'Asia'],
                            [21.4,4,109, 'Europe']]), 
                  columns=['mpg','cyl', 'hp', 'origin'],
                  index=['Toyota', 'Fiat', 'Volvo'])
from bokeh.models import ColumnDataSource
cds_df = ColumnDataSource(df)


ColumnDataSource是Bokeh自己的数据结构。


创建图表


使用figure()函数创建图表。


from bokeh.plotting import figure
p1 = figure(plot_width=300, tools='pan,box_zoom')
p2 = figure(plot_width=300, plot_height=300,
            x_range=(0, 8), y_range=(0, 8))
p3 = figure()


添加和自定义渲染器


Bokeh的绘图界面支持许多不同的字形,例如线条、条形或其他多边形。


符号


# 散点标记
p1.circle(np.array([1,2,3]), 
          np.array([3,2,1]),
          fill_color='white')
p2.square(np.array([1.5,3.5,5.5]), 
          [1,4,3], 
          color='blue', 
          size=1)
# 线符号
p1.line([1,2,3,4], 
        [3,4,5,6], 
        line_width=2)
p2.multi_line(pd.DataFrame([[1,2,3],[5,6,7]]),
              pd.DataFrame([[3,4,5],[3,2,1]]),
              color="blue")


自定义符号


不同的渲染器函数接受各种参数来控制字形的外观。

如使用circel()定义圆环的颜色或直径:

fill_color:圆圈的填充颜色

fill_alpha :填充颜色的透明度(0到1之间的任何值)

line_color:圆圈轮廓的填充颜色

size:圆的大小(以屏幕空间或数据空间单位)

legend_label: 圈圈的传奇条目

# 选择和非选择符号
p = figure(tools='box_select')
p.circle('mpg', 'cyl', 
         source=cds_df,
         selection_color='red',
         nonselection_alpha=0.1)
# 悬停符号
from bokeh.models import HoverTool
hover = HoverTool(tooltips=None, mode='vline')
p3.add_tools(hover)


在bokeh中,您可以通过几种方式指定颜色。例如:

  1. CSS颜色器(如"firebrick")
  2. 使用十六进制值 (如"#00ff00")
  3. 使用RGB颜色的3元组(如(100, 100, 255))
  4. 使用4元组的RGBA颜色 (如(100, 100, 255, 0.5))
  5. 颜色映射器


# 颜色映射器
from bokeh.models import CategoricalColorMapper
color_mapper = CategoricalColorMapper(
               factors=['US', 'Asia', 'Europe'],
               palette=['blue', 'red', 'green'])
p3.circle('mpg', 'cyl', 
          source=cds_df,
          color=dict(field='origin',transform=color_mapper),
          legend='Origin')


图例位置


# 绘图区域内部
p.legend.location = 'bottom_left'
from bokeh.models import Legend
r1 = p2.asterisk(np.array([1,2,3]), 
                 np.array([3,2,1])
r2 = p2.line([1,2,3,4], [3,4,5,6])
legend = Legend(items=[("One" ,[p1, r1]),("Two",[r2])],
                location=(0, -30))
# 绘图区域外部
p.add_layout(legend, 'right')


图例方向

p.legend.orientation = "horizontal"
p.legend.orientation = "vertical"


图例背景和边界

p.legend.border_line_color = "navy"
p.legend.background_fill_color = "white"


图例文本的外观

p.legend.label_text_font = "times"
p.legend.label_text_font_style = "italic"
p.legend.label_text_color = "navy"


实用主题

五个内置主题:caliber, dark_minimal, light_minimal, night_sky, and contrast

from bokeh.io import curdoc
curdoc().theme = "dark_minimal"


创建行&列布局

组合单个图表的最简单方法是将它们分配给行或列。

# 行
from bokeh.layouts import row
layout = row(p1,p2,p3)
# 列
from bokeh.layouts import columns
layout = column(p1,p2,p3)
# 嵌套行和列
layout = row(column(p1,p2), p3)


创建网格布局

from bokeh.layouts import gridplot
row1 = [p1,p2]
row2 = [p3]
layout = gridplot([[p1,p2],[p3]])


选项卡布局

from bokeh.models.widgets import Panel, Tabs
tab1 = Panel(child=p1, title="tab1")
tab2 = Panel(child=p2, title="tab2")
layout = Tabs(tabs=[tab1, tab2])


连接绘图

# 连接轴
p2.x_range = p1.x_range
p2.y_range = p1.y_range
# 连接刷
p4 = figure(plot_width = 100,
            tools='box_select,lasso_select')
p4.circle('mpg', 'cyl', 
          source=cds_df)
p5 = figure(plot_width = 200,
            tools='box_select,lasso_select')
p5.circle('mpg', 'hp', 
          source=cds_df)
layout = row(p4,p5)


输出与导出


Notebook


from bokeh.io import output_notebook, show
output_notebook()


HTML

# 独立的
from bokeh.embed import file_html
from bokeh.resources import CDN
html = file_html(p, CDN, "my_plot")


使用output_file()函数将可视化保存到HTML文件中。

from bokeh.io import output_file, show
output_file('my_bar_chart.html', mode='cdn')
# 组件
from bokeh.embed import components
script, div = components(p)


PNG & SVG


Bokeh使用Selenium创建PNG和SVG文件,所以bokeh需要通过能够让Selenium访问的浏览器来渲染PNG或SVG文件。

Selenium允许Bokeh在没有图形用户界面(GUI)的浏览器中运行。Selenium需要能够访问Firefox浏览器(通过geckodriver包)或Chromium浏览器(通过chromedriver包)。

因此需要安装第三方包:


pip install selenium geckodriver firefox
# png
from bokeh.io import export_png
export_png(p, filename="plot.png")
 # svg
from bokeh.io import export_svgs
p.output_backend = "svg"
export_svgs(p, filename="plot.svg")


显示和导出图表


选择HTML且调用show()函数时,Bokeh会创建HTML文件。该功能还会自动打开网页浏览器以显示HTML文件。

如果希望Bokeh只生成文件而不在web浏览器中打开它,则使用save()函数代替。此时需要提前导入save()函数。


from bokeh.plotting import show, save
show(layout)
save(layout)

更多详情请参见官方文档:https://docs.bokeh.org/

相关文章
|
存储 算法
嵌入式系统中的数据压缩技术
嵌入式系统中的数据压缩技术
1087 0
|
SQL 人工智能 大数据
新入互联网职场必考的6个大数据证书!含金量高+门槛低,新手速看
先选方向,再考证书:别盲目跟风!比如想做数据分析就优先考CDA,想进云计算赛道选阿里云。 实战>证书:证书只是敲门砖,企业更看重你的项目经验。考完证立刻用真实数据练手(如Kaggle竞赛)。 性价比至上:学生党优先选免费/低价证书(如IBM Data Science),工作党可冲高含金量证书(如CAIE)。
|
传感器 机器学习/深度学习 人工智能
技术分享:智能电网巡检与传感器数据自动分析——AI助力设备状态实时监控与故障预警
这篇文章介绍了AI在智能电网巡检与传感器数据分析中的应用,通过信息抽取、OCR识别和机器学习等技术,实现设备状态监控和故障预警的自动化。AI系统能够高效处理巡检报告和传感器数据,精准识别设备故障并实时预警,显著提升了电网运营的安全性和可靠性。随着AI技术的发展,其在智能电网管理中的作用将日益重要。
1085 1
最通俗易懂的 JAVA slf4j,log4j,log4j2,logback 关系与区别以及完整集成案例
最通俗易懂的 JAVA slf4j,log4j,log4j2,logback 关系与区别以及完整集成案例
最通俗易懂的 JAVA slf4j,log4j,log4j2,logback 关系与区别以及完整集成案例
|
人工智能 Docker 索引
推荐一个双语对照的 PDF 翻译工具的开源项目:PDFMathTranslate
今天给大家推荐一个**双语对照的 PDF 翻译工具**的开源项目:PDFMathTranslate 。
推荐一个双语对照的 PDF 翻译工具的开源项目:PDFMathTranslate
|
物联网 程序员 芯片
你知道Hi3861芯片吗,支持OpenHarmony系统
本文介绍华为Hi3861芯片,该芯片集成了WiFi和蓝牙功能,具备低功耗、高集成度、强大通信能力和丰富接口资源,广泛应用于智能家居、智能穿戴、工业物联网和智慧城市等领域,助力开发者实现高效物联网解决方案。
1056 0
你知道Hi3861芯片吗,支持OpenHarmony系统
|
存储 人工智能 搜索推荐
整合长期记忆,AI实现自我进化,探索大模型这一可能性
本文探讨了通过整合长期记忆(LTM),AI模型能否实现自我进化,以提升处理新任务和适应环境的能力。LTM能帮助模型存储和利用长期信息,提高决策质量和服务个性化水平。文章还讨论了LTM整合的挑战及解决方案,以及如何借鉴人类记忆机制设计有效的LTM策略。[论文链接](https://arxiv.org/pdf/2410.15665)
1007 17
|
Ubuntu Linux 网络安全
Miniconda安装使用教程
Miniconda安装使用教程
5181 49
|
监控 安全 网络协议
【网络工程师必备神器】锐捷设备命令大全:一文在手,天下我有!
【8月更文挑战第22天】锐捷网络专攻网络解决方案,其设备广泛应用在教育、政府及企业等领域。本文汇总了锐捷设备常用命令及其应用场景:包括登录与退出设备、查看系统状态、接口与VLAN配置、路由与QoS设定、安全配置及日志监控等。通过示例如telnet/ssh登录、display命令查看信息、配置IP地址与VLAN、设置静态路由与OSPF、限速与队列调度、端口安全与ACL、SNMP监控与重启设备等,助力工程师高效管理与维护网络。
2158 4
|
缓存 Java Android开发
Android 9.0 WiFi 扫描结果上报和获取流程
Android 9.0 WiFi 扫描结果上报和获取流程
942 0

热门文章

最新文章