Bokeh 绘图基础与常用功能

news2024/11/24 3:55:20

Reference | Getting started with Bokeh – Medium Post

在 Github 上查看交互式的绘图结果 | Bokeh 绘图入门 – Posted by Paradise

在这篇文章中,从最基本的绘图开始,逐步学习 Bokeh 中常用的绘图功能,目标是能满足大部分基础的绘图需求。

一、绘图基础

创建一个空白画布,并在浏览器中显示结果或者保存到本地:

import bokeh
import bokeh.io
import bokeh.plotting

fig = bokeh.plotting.figure()

bokeh.io.output_file('output.html')
bokeh.io.show(fig)

在画布上添加标记元素:

import numpy as np

fig = bokeh.plotting.figure()
x = np.linspace(-np.pi, np.pi, 30)
fig.line(x, np.sin(x))
bokeh.io.show(fig)

添加多个标记元素,按顺序显示:

fig = bokeh.plotting.figure()
fig.line(x, np.sin(x))
fig.circle(x, np.cos(x), fill_color='orange', size=10)
bokeh.io.show(fig)

二、更多画布设置

设置画布大小和工具栏:

fig = bokeh.plotting.figure(
    plot_width=800, plot_height=400,
    tools='pan, wheel_zoom, lasso_select, tap, undo, reset',
    toolbar_location='below')
bokeh.io.show(fig)

使用 models 转化 DataFrame,用 DataFrame 中的数据绘图,并设置悬停工具提示:

import tushare
import bokeh.models
import pandas as pd

# 获取中国银行股价历史数据,并准备工具提示
df = tushare.get_hist_data('601988')
df['index'] = pd.to_datetime(df.index)
df['Date'] = list(df.index)
df['volume_str'] = round(df.volume/1000).map(lambda x: str(int(x))+' K')
# df['color'] = ['green' if pc<0 else 'red' for pc in df.price_change]

# 转化 DataFrame 得到绘图数据源
source = bokeh.models.ColumnDataSource(df)

# 设置工具提示
hover = bokeh.models.HoverTool(tooltips=[
            ("Date", "@Date"),
            ("Open", "@open"),
            ("High", "@high"),
            ("Low", "@low"),
            ("Close", "@close"),
            ("Volume", "@volume_str")])

# 绘图(时序数据)
fig = bokeh.plotting.figure(
    x_axis_type='datetime', 
    plot_width=800, plot_height=400,
    tools=[hover], toolbar_location=None,       # 工具提示
    title='BOC Stock Prices',                   # 标题
    x_axis_label='Date', y_axis_label='Price'   # 轴标签
    )
fig.line(x='index', y='close', source=source)
# fig.vbar(x='index', top='price_change', width=1, color='color', source=source)
bokeh.io.show(fig)

More examples for HoverTool

三、颜色设置

Documents of palettes

使用调色板映射数据标记,线性颜色映射:

import bokeh.palettes
import bokeh.transform

x = np.linspace(0, 10, 100)
mapper = bokeh.transform.linear_cmap(
    field_name='y',     # 对纵坐标数值进行映射
    palette=bokeh.palettes.Spectral6,   # 所有调色板:dir(bokeh.palettes)
    low=-1, high=1      # 映射数值范围
    )

fig = bokeh.plotting.figure(plot_width=600, plot_height=300)
fig.circle(x, np.sin(x), color=mapper, size=8)
bokeh.io.show(fig)

对数映射:

mapper = bokeh.transform.log_cmap(
    field_name='y',
    palette=bokeh.palettes.Plasma8,
    low=0, high=1024)
fig = bokeh.plotting.figure(plot_width=600, plot_height=300)
fig.circle(x, 2**x, color=mapper, size=8)
bokeh.io.show(fig)

四、子图排列与关联

通过 layouts 子模块设置多个子图, 单行或单列布局:

import bokeh.layouts

def make_plot(func):
    fig = bokeh.plotting.figure(plot_width=400, plot_height=400, toolbar_location=None)
    x = np.linspace(-np.pi, np.pi, 100)
    fig.line(x, func(x))
    return fig
figs = [make_plot(func) for func in [np.sin, np.cos, np.tan]]

subplots = bokeh.layouts.row(*figs)     # 纵向布局使用 bokeh.layouts.column
bokeh.io.show(subplots)

网格布局:

figs = [make_plot(func) for func in [np.sin, np.cos, np.tan]]
subplots = bokeh.layouts.gridplot([[figs[0],figs[1]], [None,figs[2]]])
bokeh.io.show(subplots)

使用标签页进行布局,并联结每个子图的轴范围:

import bokeh.models.widgets as widgets

figs = [make_plot(func) for func in [np.sin, np.cos, np.tan]]
# 令图 1 和图 2 的轴范围在交互时同步变动
figs[0].x_range = figs[1].x_range
figs[0].y_range = figs[1].y_range

tab1 = widgets.Panel(child=bokeh.layouts.row(figs[0], figs[1]), title='Sheet1')
tab2 = widgets.Panel(child=bokeh.layouts.row(figs[2]), title='Sheet2')
tabs = widgets.Tabs(tabs=[tab1, tab2])
bokeh.io.show(tabs)

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

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

相关文章

密码学—Vigenere加密Python程序

文章目录 维吉尼亚加密加密算法解密算法 注意事项 维吉尼亚加密 古典密码&#xff0c;属于多表加密。 怎么就是多表了&#xff1f; 维吉尼亚密码的加密算法实质是凯撒密码&#xff0c;因为他是先分好小组&#xff0c;然后用密钥串对应着分好组的每一个字母进行加密&#xff08…

用纯CSS和DIV绘制播放按钮样式

最近在做前端的视屏监控播放对接&#xff0c;前端弄了个播放按钮&#xff0c;记录下&#xff0c;效果如图所示&#xff1a; HTML代码&#xff1a; <div className"box"><div className"one" ><div className"two"><div cl…

1.1、Java初级认识Java、jdk、 idea

前言 1.1 软件开发之 Java 开发 Java现在已经占有主流市场 企业级应用领域&#xff08;JavaEE 后台&#xff09;&#xff1a;用来开发企业级的应用程序&#xff0c;大型网站如淘宝、京 东、12306&#xff0c;以及各大物流、银行、金融、社交、医疗、交通、各种 OA 系统等都…

Centos7下root安装Elasticsearchhe和IK分词器

安装Elasticsearchhe和IK分词器 1. 安装前准备 安装Elasticsearch之前&#xff0c;需要安装Java8或Java8以上的Java环境&#xff0c;linux安装jdk百度一下。 2. 下载Elasticsearchhe 创建安装目录 mkdir -p /usr/local/elasticsearch如果主机联网,可以选择在线下载&#…

Matlab可调用MODTRAN5封装器之Mod5

目录 Mod5介绍安装Mod5Mod5文件位置注意事项 运行Mod5创建实例设置MODTRAN参数运行MODTRAN结果绘制示例图 Mod5介绍 MODTRAN 是一个计算地球大气中电磁辐射传输的软件代码。MODTRAN是通过使用具有严格格式的输入文本文件来控制的。这个文件被称为“tape5”&#xff0c;扩展名为…

华硕ROG幻14 2023原装Windows11系统工厂模式带ASUS RECOVERY功能恢复

第一步&#xff1a;下载原装系统文件&#xff08;工厂包&#xff09; 第二步&#xff1a;华硕天选冰刃魔霸枪神灵耀等 需要自备16g空u盘安装 第三步&#xff1a;创建u盘分区&#xff0c;第一个分区格式为FAT32(存放TLK引导文件)&#xff0c;第二个分区大小为NTFS&#xff08…

利用Jetpack Compose进行导航(Navigation)

引言 Jetpack Compose是一个现代化的&#xff0c;声明式的UI工具包&#xff0c;它让我们可以更快、更简便地构建Android的界面。今天&#xff0c;我们要讨论如何使用Jetpack Compose和它的导航库&#xff08;Navigation Compose&#xff09;来进行应用导航。 初步了解Navigati…

单片机学习 15-ds1302时钟实验

DS1302 时钟实验 ​ 在前面章节&#xff0c;我们介绍了如何使用单片机 IO 口模拟 IIC 总线、单总线时序。这一章我们来学习 DS1302 时钟芯片&#xff0c;该芯片是 3 线 SPI 接口&#xff0c;所以需要使用 51单片机的 3 个 IO 口模拟 SPI 时序与 DS1302 时钟芯片通信&#xff0…

maven打包本地jar到项目中

在maven项目中&#xff0c;我们的项目依赖一般取自local的repository或者远程的repository&#xff0c;比如下面这个配置&#xff1a; maven <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> &l…

蓝桥杯专题-试题版-【矩阵乘法】【连号区间数】【闰年判断】【时间转换】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

爱普生L3515打印不出东西,打印后机器工作进纸后出来空白纸张

环境&#xff1a; 爱普生L3515彩色喷墨打印机 问题描述&#xff1a; 爱普生L3515突然打印不出东西&#xff0c;打印后机器工作进纸&#xff0c;出来空白纸张 解决方案&#xff1a; 1.检查是否没有墨水了&#xff0c;开始以为没了&#xff0c;加了满了 2.测试打印机还是打不…

【AUTOSAR】BMS开发实际项目讲解(十五)----电池管理系统架构与系统组件定义

系统架构 /System Architecture 系统结构框图 / System Structure Diagram 系统安全架构图 系统组件定义 / System Components Definition 系统组件定义表 组件需求定义/system components requirement definition系统组件需求定义表 ID 名称 ASIL 描述 SPFM LFM PMHF …

将英文版的Visual Studio 2019 切换为简体中文显示

一、需求说明 在使用Visual Studio 2019集成IDE环境下进行开发工作时;需要将IDE的环境修改为中文环境进行开发工作,中文界面对于不太熟悉Visual Studio 2019 环境的人来说是十分友好的。 二、需求分析 目前安装的Visual Studio 2019集成IDE环境是全英文的界面,需要切换为简…

hash冲突是什么?

哈希&#xff08;散列&#xff09;原理及使用 哈希&#xff08;散列&#xff09;原理及避免哈希冲突 哈希&#xff08;散列&#xff09;原理及使用哈希冲突常见哈希函数解决哈希冲突方案实现一个开散列哈希表 当我们在一堆数据中查找一个元素时&#xff0c;使用普通方法得到的时…

ChatGPT: 交互式AI助手为互联网用户带来全新体验

目录 概述&#xff1a; 优势&#xff1a; 挑战&#xff1a; 未来发展方向&#xff1a; 概述&#xff1a; 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;正以惊人的速度改变着我们的生活方式和体验方式。AI 的应用范围越来越广泛&#xff0c;从语音助手到…

Linux 内存详解,即top、free、vmstat、meminfo、Buffer和Cache的介绍

Linux 内存详解&#xff0c;即top、free、vmstat、meminfo、Buffer和Cache的介绍_用作内核缓存的内存量_zzhongcy的博客-CSDN博客 1、top linux下的任务管理器 top命令是Linux下常用的性能分析工具&#xff0c;能够实时显示系统中各个进程的资源占用状况&#xff0c;类似于Win…

C#项目练习系列--1.倒计时器

C#项目练习系列--1.倒计时器 实操感想代码 实操 总体实现功能&#xff1a;选定计时时间—点击开始计时—进度条和剩余时间显示—提示时间到。 软件版本&#xff1a;VS2019 1.新建工程 选择c#&#xff0c;windows窗体应用&#xff0c;.NET Framework版本选择4或4以下时最后…

SpringBoot+WebSocket+Session共享

前言 WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端 一、为什么需要WebSocket HTTP 是基于请求响应式的&#xff0c;即通信只能由客户端发起&#xff0c;服务端做出响应&#xff0c;无状态&…

Spring Boot 中的 PropertySource 是什么,原理,如何使用

Spring Boot 中的 PropertySource 是什么&#xff0c;原理&#xff0c;如何使用 介绍 在 Spring Boot 中&#xff0c;PropertySource 是一个非常重要的概念。它允许您在应用程序中定义属性&#xff0c;并将这些属性注入到 Spring 环境中。在本文中&#xff0c;我们将介绍 Spr…

GO富集绘图绘制方法,零基础教程,替换数据直接作图,完成版R语言脚本

速绘 丨 GO富集气泡图 本期分享一个快速绘制GO富集结果图的方法&#xff0c;主要使用R语言tidyverse包&#xff0c;只需导入数据即可一步出图&#xff0c;可以自定义显示的数目、颜色、筛选参数&#xff0c;从此以后绘制GO富集图只需1秒。 前言介绍 下面是一个GO富集分析的结果…