100天精通Python(可视化篇)——第89天:Bokeh库绘图可视化基础入门(参数说明+案例实战)

news2024/12/24 20:54:05

文章目录

  • 专栏导读
  • 一、Bokeh是什么?
  • 二、安装与导入
  • 三、Bokeh接口介绍
  • 四、创建图表
  • 五、添加自定义渲染器
    • 切换主题
    • 添加图例
    • 图例位置
    • 图例方向
    • 图例背景和边界
    • 图例文本的外观
    • 行列布局
    • 网格布局

专栏导读

🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html

  • 优点订阅限时9.9付费专栏进入千人全栈VIP答疑群,作者优先解答机会(代码指导、远程服务),群里大佬众多可以抱团取暖(大厂内推机会)
  • 专栏福利简历指导、招聘内推、每周送实体书、80G全栈学习视频、300本IT电子书:Python、Java、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等
    在这里插入图片描述
    在这里插入图片描述

一、Bokeh是什么?

Bokeh是一个用于Python编程语言的交互式数据可视化库。它专注于提供高性能的数据可视化工具,支持多种图表类型,包括散点图、线图、条形图、热图等。Bokeh还提供了交互式工具,如缩放、平移、鼠标悬停等,可以帮助用户更好地探索和理解数据。Bokeh可用于Web应用程序、Jupyter笔记本和独立Python脚本中。

在这里插入图片描述

  • 专门针对Web浏览器的交互式、可视化Python绘图库

  • 可以做出像D3.js简洁漂亮的交互可视化效果,但是使用难度低于D3.js。

  • 独立的HTML文档或服务端程序

  • 可以处理大量、动态或数据流

  • 支持Python (或Scala, R, Julia…)

  • 不需要使用Javascript

  • 绘图可以嵌入到 Flask 或启用 Django 的 Web 应用程序的输出中,它们也可以在 Jupyter notebooks 中使用。

官方地址:https://github.com/bokeh/bokeh

二、安装与导入

pip安装Bokeh库运行以下命令:

pip install pandas-Bokeh

导包:

from bokeh.plotting import figure, output_file, show
  • figure():函数创建一个用于绘图的新图形。
  • output_file():函数用于指定一个 HTML 文件,可视化图像输出到静态 HTML 文件中
  • show():函数在笔记本上的浏览器中显示散景图。

如果想用Jupyter notebook显示的话,需要将output_file更改为output_notebook

from bokeh.plotting import figure, output_notebook, show

三、Bokeh接口介绍

下面是 Bokeh 的主要接口介绍:

  1. bokeh.plotting:这是 Bokeh 的主要接口,用于创建各种类型的图形,包括散点图、线图、柱状图、区域图等。它提供了一个 Figure 类,用于创建绘图对象,并提供了多种绘图方法,例如 circle、line、rect、patch 等,用于绘制各种类型的图形。

  2. bokeh.layouts:这个接口用于创建布局,可以将多个绘图对象组合在一起,创建复杂的布局。它提供了多种布局方式,例如 row、column、grid、widgetbox 等。

  3. bokeh.models:这个接口用于创建 Bokeh 的模型,例如数据源、渐变、标注、工具等。它提供了多种模型,可以用于创建各种类型的图形和交互式控件。

  4. bokeh.io:这个接口用于将 Bokeh 的图形输出到不同的目标,例如静态 HTML 文件、动态 JavaScript 文件、Jupyter Notebook 等。它提供了多种输出方式,例如 output_file、output_notebook、show 等。

除了以上主要接口,Bokeh 还提供了多种工具和插件,例如 bokeh.server、bokeh.embed 等,用于创建交互式应用和嵌入 Bokeh 图形到其他网站或应用中。

四、创建图表

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

from bokeh.plotting import figure
figure(**kwargs)

常用参数说明:

  1. title:图形的标题。

  2. x_axis_label:X 轴的标签。

  3. y_axis_label:Y 轴的标签。

  4. x_range:X 轴的范围。

  5. y_range:Y 轴的范围。

  6. plot_width:图形的宽度。

  7. plot_height:图形的高度。

  8. tools:工具栏的配置,可以是字符串、列表或工具栏对象。

  9. toolbar_location:工具栏的位置,可以是 “above”、“below”、“left” 或 “right”。

  10. toolbar_sticky:工具栏是否固定在图形上方。

  11. background_fill_color:图形的背景颜色。

  12. border_fill_color:图形的边框颜色。

  13. min_border_left:左边框的最小宽度。

  14. min_border_right:右边框的最小宽度。

  15. min_border_top:顶部边框的最小高度。

  16. min_border_bottom:底部边框的最小高度。

  17. responsive:是否启用响应式布局。

注意:

  • 在Bokeh 2.3.2及以前的版本中,应该使用width和height参数设置长宽
  • 在Bokeh 2.3.3及以后的版本中,可以使用plot_width和plot_height参数

(1)这些参数可以在创建绘图对象时进行配置,输出到Jupyter notebook使用的output_notebook()

from bokeh.plotting import figure, output_notebook, show

# 创建图表
p = figure(title="散点图", x_axis_label='X轴', y_axis_label='Y轴')

# 绘制散点图
p.circle(x, y, size=10, color='navy', alpha=0.5)

# 输出Jupyter notebook
output_notebook()

# 显示图形
show(p)

运行结果:
在这里插入图片描述
(2)使用output_file()输出到html网页文件:

from bokeh.plotting import figure, output_file, show

# 准备数据
x = [1, 2, 3, 4, 5]
y = [6, 7, 2, 4, 5]

# 创建图表
p = figure(title="散点图", x_axis_label='X轴', y_axis_label='Y轴')

# 绘制散点图
p.circle(x, y, size=10, color='navy', alpha=0.5)

# 输出HTML,自行修改文件名
output_file('test.html')

# 显示图形
show(p)

运行结果,会自动打开一个html网页一样具有交互效果:
在这里插入图片描述

(3)Bokeh库的figure函数可以绘制以下类型的图形:

  1. 散点图(Scatter plot):使用circle()方法绘制散点图。

  2. 折线图(Line plot):使用line()方法绘制折线图。

  3. 柱状图(Bar plot):使用vbar()或hbar()方法绘制垂直或水平的柱状图。

  4. 直方图(Histogram):使用hist()方法绘制直方图。

  5. 区域图(Area plot):使用varea()或harea()方法绘制垂直或水平的区域图。

  6. 饼图(Pie chart):使用wedge()方法绘制饼图。

  7. 矢量图(Vector plot):使用ray()或segment()方法绘制矢量图。

  8. 热力图(Heatmap):使用rect()方法绘制矩形,并使用color_mapper参数指定颜色。

  9. 等高线图(Contour plot):使用contour()或contourf()方法绘制等高线图。

  10. 地图(Map):使用tile()方法绘制地图,并使用circle()方法绘制地点标记。

以上是Bokeh库figure函数可以绘制的常见图形。除此之外,Bokeh还支持其他类型的图形,如网络图(Graph)和时间序列图(Time series plot)等。

五、添加自定义渲染器

切换主题

Bokeh库提供了多种主题,可以让您更改图表的样式。以下是Bokeh库目前提供的主题列表和简要说明:

  • caliber: 一个灰色和蓝色的主题,适合简单的图表。
  • dark_minimal: 一个黑色和灰色的主题,适合在暗背景上显示的图表。
  • light_minimal: 一个白色和灰色的主题,适合在明亮背景上显示的图表。
  • night_sky: 一个黑色和紫色的主题,适合在暗背景上显示的图表。
  • contrast: 一个黑色和白色的主题,适合强调数据的对比。
  • ggplot: 一个灰色和蓝色的主题,适合绘制统计图表。
  • bmh: 一个灰色和蓝色的主题,适合绘制科学图表。
  • dark_unica: 一个黑色和灰色的主题,适合在暗背景上显示的图表

在这个例子中,通过curdoc().theme将主题更改为’dark_minimal’:

from bokeh.plotting import figure, output_notebook, show
from bokeh.io import curdoc

# 更改主题
curdoc().theme = 'dark_minimal'

# 创建图表
p = figure(title="散点图", x_axis_label='X轴', y_axis_label='Y轴')

# 绘制散点图
p.circle(x, y, size=10, color='navy', alpha=0.5)

# 输出Jupyter notebook
output_notebook()

# 显示图形
show(p)

运行结果:
在这里插入图片描述

添加图例

在这个例子中,我们首先创建了一个Figure对象,并绘制了散点图。然后,我们使用Legend对象创建了一个图例,并将其添加到图表中。Legend对象的items属性是一个包含图例项的列表。每个图例项由一个标签和一个与之关联的GlyphRenderer组成。在这个例子中,我们只有一个图例项,即"散点图",它与我们之前绘制的散点图相关联。最后,我们使用add_layout方法将图例添加到图表中:

from bokeh.plotting import figure, output_notebook, show
from bokeh.models import Legend

# 创建图表
p = figure(title="散点图", x_axis_label='X轴', y_axis_label='Y轴')

# 绘制散点图
p.circle(x, y, size=10, color='navy', alpha=0.5)

# 创建图例
legend = Legend(items=[("散点图", [p.circle(x, y, size=10, color='navy', alpha=0.5)])])

# 将图例添加到图表中
p.add_layout(legend)

# 输出Jupyter notebook
output_notebook()

# 显示图形
show(p)

运行结果:
在这里插入图片描述

图例位置

在这个例子中,我们首先创建了一个Figure对象,并添加了两条线。我们然后使用Legend对象来创建一个新的图例,并将其放置在左上角。最后,我们使用add_layout方法将图例移到右侧。您可以通过修改location参数来将图例放置在其他位置,例如"top_right"或"bottom_left"等:

from bokeh.plotting import figure, output_notebook, show
from bokeh.models import Legend

# 创建图表
p = figure(title="散点图", x_axis_label='X轴', y_axis_label='Y轴')

# 绘制散点图
p.circle(x, y, size=10, color='navy', alpha=0.5)

# 创建图例
legend = Legend(items=[("散点图", [p.circle(x, y, size=10, color='navy', alpha=0.5)])], location="top_left")

# 将图例添加到图表中
p.add_layout(legend, 'left')  # 将图例从默认位置移到右侧

# 输出Jupyter notebook
output_notebook()

# 显示图形
show(p)

运行结果:
在这里插入图片描述

图例方向

# 表示将图例的方向设置为水平方向。
p.legend.orientation = "horizontal"
# 表示将图例的方向设置为垂直方向。
p.legend.orientation = "vertical"

图例背景和边界

# 表示将图例边框的颜色设置为深蓝色
p.legend.border_line_color = "navy"
# 表示将图例背景的填充颜色设置为白色
p.legend.background_fill_color = "white"

图例文本的外观

# 表示将图例标签的字体设置为Times字体
p.legend.label_text_font = "times"
# 表示将图例标签的字体样式设置为斜体
p.legend.label_text_font_style = "italic"
# 表示将图例标签的字体颜色设置为深蓝色
p.legend.label_text_color = "navy"

行列布局

Bokeh库提供了多种布局选项,以帮助您更好地组织和排列图表。其中之一是行列布局,它允许您将多个图表排列在网格中。

在这个例子中,我们首先创建了两个Figure对象,分别绘制了一条线和一组散点。然后,我们使用gridplot函数创建一个行列布局,将这两个图表排列在一个网格中。gridplot函数的参数是一个二维列表,其中每个元素都是一个图表对象:

from bokeh.layouts import gridplot
from bokeh.plotting import figure, output_notebook, show

# 创建第一个图表
p1 = figure(title="图表1", x_axis_label='X轴', y_axis_label='Y轴')
p1.line([1, 2, 3], [4, 5, 6], line_width=2)

# 创建第二个图表
p2 = figure(title="图表2", x_axis_label='X轴', y_axis_label='Y轴')
p2.circle([1, 2, 3], [4, 5, 6], size=10, color='navy', alpha=0.5)

# 创建行列布局
layout = gridplot([[p1, p2]])

# 输出Jupyter notebook
output_notebook()

# 显示图形
show(layout)

运行结果:
在这里插入图片描述

网格布局

Bokeh库提供了多种网格布局方式,可以通过将多个图表组合在一起来创建复杂的数据可视化应用程序。以下是Bokeh中常用的几种网格布局:

  • row():将多个图表按行排列。

  • column():将多个图表按列排列。

  • gridplot():将多个图表组合成一个网格布局。

  • layout():将多个图表按指定的布局方式组合在一起。

下面是一个示例代码,展示如何使用Bokeh的网格布局功能:

from bokeh.plotting import figure, show
from bokeh.layouts import row, column, gridplot, layout

# 创建三个图表
p1 = figure(width=300, height=300)
p1.circle([1,2,3], [4,5,6])

p2 = figure(width=300, height=300)
p2.line([1,2,3], [4,5,6])

p3 = figure(width=300, height=300)
p3.square([1,2,3], [4,5,6])

# 将三个图表按行排列
row_layout = row(p1, p2, p3)

# 将三个图表按列排列
column_layout = column(p1, p2, p3)

# 将三个图表组合成一个网格布局
grid_layout = gridplot([[p1, p2], [None, p3]])

# 将三个图表按指定的布局方式组合在一起
custom_layout = layout([[p1, p2], [p3]])

# 显示图表
show(row_layout)
show(column_layout)
show(grid_layout)
show(custom_layout)

运行结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/581932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十万个C语言冷知识

1.printf返回值&#xff1a; 成功&#xff1a;返回打印字符的个数 失败&#xff1a;返回EOF&#xff0c;EOF是文件结束的标志&#xff0c;宏定义为-1 #include <stdio.h> int main() {char str[] "123456789";printf("%d\n", printf("%d\n&quo…

效率神器AutoHotKey的初步使用

文章目录 下载安装与体验快捷键在程序中的热键热字串和重映射实战 Python命令行 下载安装与体验 下载AHK&#xff0c;安装后&#xff0c;右键->新建->AutoHotkey脚本&#xff0c;内容为 #space::Run tinycool.blog.csdn.net其中&#xff0c;#表示Win键&#xff1b;#spa…

Rust每日一练(Leetday0014) 组合总和II、缺失正数、接雨水

目录 40. 组合总和 II Combination Sum II &#x1f31f;&#x1f31f; 41. 缺失的第一个正数 First Missing Positive &#x1f31f;&#x1f31f;&#x1f31f; 42. 接雨水 Trapping Rain Water &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题…

Web 自动化测试案例(入门级)——关闭某视频网站弹出广告以及打开登录框输入内容

文章目录 &#x1f4cb;前言&#x1f3af;自动化测试&#x1f9e9;环境的搭建 &#x1f3af;案例介绍&#x1f4dd;最后 &#x1f4cb;前言 人生苦短&#xff0c;我用Python。许久没写博客了&#xff0c;今天又是久违的参与话题的讨论&#xff0c;话题的内容是&#xff1a;如何…

基于springboot注解的shiro 授权及角色认证

目录 授权 后端接口服务注解 授权验证-没有角色无法访问 授权验证-获取角色进行验证 授权验证-获取权限进行验证 授权验证-异常处理 授权 用户登录后&#xff0c;需要验证是否具有指定角色指定权限。Shiro也提供了方便的工具进行判 断。 这个工具就是Realm的doGetAuthor…

华为OD机试真题B卷 Java 实现【狼羊过河】,附详细解题思路

一、题目描述 一农夫带着m只羊&#xff0c;n只狼过河&#xff0c;农夫有一条可载x只狼/羊的船&#xff1b;农夫在时或者羊的数量大于狼时&#xff0c;狼不会攻击羊&#xff1b; 农夫在不损失羊的情况下&#xff0c;运输几次可以完成运输&#xff1f; 返程不计入次数。 二、…

K8s容器运行环境安全加固

K8s容器运行环境安全加固 目录 文章目录 K8s容器运行环境安全加固目录1、最小特权原则&#xff08;POLP&#xff09;2、AppArmor限制容器对资源访问3、Seccomp 限制容器进程系统调用关于我最后 1、最小特权原则&#xff08;POLP&#xff09; **最小特权原则 (Principle of lea…

graalvm把java编译为c/c++能够使用的动态库(dll/so)

graalvm把java编译为c/c能够使用的动态库(dll/so) 1.安装graalvm oracle官方企业版 github的openjdk版本 1.1 下载对应系统版本&#xff0c;配置环境变量 本人环境 1. win10 openjdk 17.0.5 2022-10-18 OpenJDK Runtime Environment GraalVM CE 22.3.0 (build 17.0.58-jv…

chatgpt赋能python:Python中的None值如何去掉?

Python中的None值如何去掉&#xff1f; Python是一种具有高度灵活性和可读性的编程语言&#xff0c;它有许多强大的功能&#xff0c;令许多开发人员喜欢使用它。然而&#xff0c;可能会遇到延迟或者None值的情况&#xff0c;这时需要我们找到正确的方法去除它们。 None值是什…

C#,码海拾贝(27)——求解“对称方程组”的“分解法”之C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static partial class LEquations { /// <summary> /…

happens-before规则

happens-before背景由来 happens-before的概念最初由Leslie Lamport在其一篇影响深远的论文&#xff08;《Time&#xff0c;Clocks and the Ordering of Events in a Distributed System》&#xff09;中提出。Leslie Lamport使用 happens-before 来定义分布式系统中事件之间…

【利用AI让知识体系化】7种结构型模式

文章目录 结构型模式简介适配器模式装饰器模式代理模式外观模式桥接模式组合模式享元模式 结构型模式 简介 在设计模式中&#xff0c;结构型模式用于描述如何将对象和类组装成较大的结构&#xff0c;并灵活地处理对象之间的关系。 结构型模式包括以下几种&#xff1a; 适配器…

驱动开发——嵌入式(驱动)软开基础(十)

1. 64位的计算机有哪些优点&#xff1f; &#xff08;1&#xff09;可以进行更大范围的整数计算。 &#xff08;2&#xff09;可以支持更大的内存&#xff0c;虚拟内存空间大小一般为2^48&#xff08;256TB&#xff09;。64位的Linux一般使用48位表示虚拟内存空间地址&#x…

esp8266 OTA远程无线升级

第一步、编译生成.bin升级固件 本教程需要用到 arduino IDE的esp8266开发环境,关于arduino IDE 的ESP8266环境配置可参考:环境配置: 点击跳转 如果已安装好esp8266 开发环境,继续: 使用arduino IDE软件,打开随便一个需要升级的程序,点击「项目」-「导出已编译的二进制…

【Bug 全解决】 Java、Spring boot 后端项目 Bug 总结

Bug 收集与总结 本文记录的是 SpringBoot 后端项目使用和运行代码时所遇到的各种问题&#xff0c;全部都已解决&#xff0c;欢迎在评论区补充你遇到的 Bug 哦&#xff01;仅以本文记录学习社区项目时&#xff0c;所遇到的奇奇怪怪的 bug&#xff0c;以及一些很愚蠢的错误&…

Golang每日一练(leetDay0080) 矩形面积、翻转二叉树

目录 223. 矩形面积 Rectangle Area &#x1f31f;&#x1f31f; 226. 翻转二叉树 Invert Binary Tree &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏…

RPC原理与实现

rpc叫做远程过程调用&#xff0c;是指一台机器上的服务通过通信协议调用网络中另一台机器上的程序&#xff0c;并拿到结果。 1、基本流程 基本流程为&#xff1a; 客户端程序通过Client Stub调度rpc函数Client Stub将调用方法、参数按照通信协议序列化成网络二进制数据&#…

koa2中HTTP错误处理

HTTP错误 访问 Web 服务器或应用程序时&#xff0c;服务器收到的每个 HTTP 请求都会以 HTTP 状态代码进行响应。 HTTP 状态代码是三位数代码&#xff0c;分为五个不同的类别。 状态代码的类别可以通过它的第一个数字快速识别&#xff1a; 1xx&#xff1a;信息2xx&#xff1a…

“大娘,你听说过ChatGPT吗?”,“你说的那个什么鸡皮蹄,我这饼里加不了!”

最近看到一个有意思的段子&#xff0c;大概意思是&#xff1a; 年轻人去买煎饼&#xff0c;问摊煎饼的大娘知不知道什么是ChatGPT。 大娘摇了摇头&#xff1a;“你说的那个什么鸡皮蹄&#xff0c;我这饼里加不了”。 年轻人尝试跟大娘解释ChatGPT是什么东西&#xff0c;大娘…

快速上手kettle(二)小试牛刀

快速上手kettle二 小试牛刀 一 、前言二 、两个小目标三、 kettle核心概念介绍3.1 转换3.1.1 步骤(Step)3.1.2 跳&#xff08;Hop&#xff09;3.1.3 元素据3.1.4 数据类型3.1.5 并发执行 3.2 作业 四、实践操作4.1 案例1 将csv文件转换成excel文件4.1.1 在kettle中新建一个转换…