python bokeh_使用Bokeh将交互性添加到您的Python图中
python bokeh
在本系列文章中,我将通过在每个Python绘图库中制作相同的多条图来研究不同Python绘图库的特性。 这次我主要关注Bokeh (发音为“ BOE-kay”)。
Bokeh中的绘图比其他一些绘图库中的绘图要复杂一些,但是付出额外的努力是有回报的。 Bokeh的设计既允许您在网络上创建自己的交互式图, 也可以让您对交互的工作方式进行详细控制。 我将通过向本系列中一直使用的多条图添加工具提示来显示此信息。 它绘制了1966年至2020年英国大选结果的数据。
图中的放大视图(©2019 Anvil )
制作多条图
在继续之前,请注意,您可能需要调整Python环境以使此代码运行,包括以下内容。
- 运行最新版本的Python( Linux , Mac和Windows的说明 )
- 验证您正在运行与这些库一起使用的Python版本
数据可在线获得,并可使用熊猫导入:
import pandas as pd
df = pd. read_csv ( 'https://anvil.works/blog/img/plotting-in-python/uk-election-results.csv' )
现在我们准备出发了。
要制作多条图,您需要稍微整理一下数据。
原始数据如下所示:
>> print(long)
year party seats
0 1966 Conservative 253
1 1970 Conservative 330
2 Feb 1974 Conservative 297
3 Oct 1974 Conservative 277
4 1979 Conservative 339
.. ... ... ...
103 2005 Others 30
104 2010 Others 29
105 2015 Others 80
106 2017 Others 59
107 2019 Others 72
[60 rows x 3 columns]
您可以将数据视为每种可能
(year, party)组合的一系列seats
值。 这正是Bokeh的想法。 您需要列出(year, party)
元组的列表:
# Get a tuple for each possible (year, party) combination
x = [ ( str ( r [ 1 ] [ 'year' ] ) , r [ 1 ] [ 'party' ] ) for r in df. iterrows ( ) ]
# This comes out as [('1922', 'Conservative'), ('1923', 'Conservative'), ... ('2019', 'Others')]
这些将是x值。 y值只是座位:
y = df [ 'seats' ]
现在,您的数据看起来像这样:
x y
('1966', 'Conservative') 253
('1970', 'Conservative') 330
('Feb 1974', 'Conservative') 297
('Oct 1974', 'Conservative') 277
('1979', 'Conservative') 339
... ... ...
('2005', 'Others') 30
('2010', 'Others') 29
('2015', 'Others') 80
('2017', 'Others') 59
('2019', 'Others') 72
Bokeh需要您将数据包装在它提供的某些对象中,以便为您提供交互功能。 将x和y数据结构包装在
ColumnDataSource对象中:
from bokeh. models import ColumnDataSource
source = ColumnDataSource ( data = { 'x' : x , 'y' : y } )
然后构造一个
Figure对象,并传入包装在FactorRange
对象中的x数据:
from bokeh. plotting import figure
from bokeh. models import FactorRange
p = figure ( x_range = FactorRange ( *x ) , width = 2000 , title = "Election results" )
您需要获得Bokeh来创建颜色图-这是一个特殊的
DataSpec词典,它是根据您提供的颜色映射生成的。 在这种情况下,颜色图是参与者名称和十六进制值之间的简单映射:
from bokeh. transform import factor_cmap
cmap = {
'Conservative' : '#0343df' ,
'Labour' : '#e50000' ,
'Liberal' : '#ffff14' ,
'Others' : '#929591' ,
}
fill_color = factor_cmap ( 'x' , palette = list ( cmap. values ( ) ) , factors = list ( cmap. keys ( ) ) , start = 1 , end = 2 )
现在您可以创建条形图:
p. vbar ( x = 'x' , top = 'y' , width = 0.9 , source = source , fill_color = fill_color , line_color = fill_color )
散景图上数据的可视表示形式称为字形,因此您已创建了一组条形字形。
调整图表的详细信息,以使其看起来像您想要的样子:
p. y_range . start = 0
p. x_range . range_padding = 0.1
p. yaxis . axis_label = 'Seats'
p. xaxis . major_label_orientation = 1
p. xgrid . grid_line_color = None
最后,告诉Bokeh您现在想看一下自己的情节:
from bokeh. io import show
show ( p )
这会将绘图写入HTML文件,并在默认的Web浏览器中将其打开。 结果如下:
散景中的多条图(©2019 Anvil )
它已经具有一些交互式功能,例如框缩放:
Bokeh的内置框缩放(©2019 Anvil )
但是Bokeh的妙处在于您如何添加自己的交互性。 在下一节中,通过向工具栏添加工具提示来进行探索。
在工具栏上添加工具提示
要将工具提示添加到栏中,您只需创建一个
HoverTool对象并将其添加到图形中:
h = HoverTool ( tooltips = [
( 'Seats' , '@y' ) ,
( '(Year, Party)' , '(@x)' )
] )
p. add_tools ( h )
参数定义工具提示上显示的数据。 变量
@y和@x
指的是你传递到变量ColumnDataSource
。 您还可以使用其他一些值。 例如,光标上的情节的位置由下式给出$x
和$y
(没有关系@x
和@y
)。
结果如下:
选举图,现在带有工具提示(©2019 Anvil )
借助BokehHTML输出,将绘图嵌入到Web应用程序中时,您可以获得完整的交互体验。 您可以在此处将此示例复制为Anvil应用(注意:Anvil需要注册才能使用)。
现在,您可以看到将所有数据包装在Bokeh中的诸如ColumnDataSource
对象中的额外工作的原因。 作为回报,您可以相对轻松地添加交互性。
回到简单:Altair
Bokeh是四个最受欢迎的绘图库之一,本系列正在研究使它们中的每一个与众不同的地方 。
我还在寻找几个以其有趣的方法而引人注目的库。 接下来,我将看Altair ,它的声明性API意味着它可以绘制真正复杂的图而不会引起脑痛。
本文基于如何在Anvil的博客上使用Bokeh进行绘图,并经允许重复使用。
翻译自: https://opensource.com/article/20/5/bokeh-python
python bokeh
python bokeh_使用Bokeh将交互性添加到您的Python图中相关推荐
- python bokeh_使用Bokeh在Python中进行交互式数据可视化
python bokeh Bokeh prides itself on being a library for interactive data visualization. Bokeh以成为交互式数 ...
- python bokeh_使用 Bokeh 为你的 Python 绘图添加交互性
本文字数:5051,阅读时长大约:6分钟 导读:在 Bokeh 中绘图比其他一些绘图库要复杂一些,但付出额外的努力是有回报的. https://linux.cn/article-12329-1.htm ...
- R语言ggplot2可视化图中添加希腊字母实战
R语言ggplot2可视化图中添加希腊字母实战 目录 R语言ggplot2可视化图中添加希腊字母实战 #ggplot2可视化图中添加希腊字母1
- python可视化工具bokeh_浅谈python可视化包Bokeh
本文研究的主要是python可视化包Bokeh的相关内容,具体如下. 问题:需要把pandas的数据绘图并通过网页显示,matplotlib需要先保存图像,不合适. 解决:在网上搜了一下,找到一篇介绍 ...
- python bokeh_浅谈python可视化包Bokeh
本文研究的主要是python可视化包Bokeh的相关内容,具体如下. 问题:需要把pandas的数据绘图并通过网页显示,matplotlib需要先保存图像,不合适. 解决:在网上搜了一下,找到一篇介绍 ...
- Python使用matplotlib函数subplot可视化多个不同颜色的折线图、为指定的子图添加图例信息(legend)
Python使用matplotlib函数subplot可视化多个不同颜色的折线图.为指定的子图添加图例信息(legend) 目录
- Python使用matplotlib函数subplot可视化多个不同颜色的折线图、在折线图上为每个数据点添加日期数据标签
Python使用matplotlib函数subplot可视化多个不同颜色的折线图.在折线图上为每个数据点添加日期数据标签 目录
- Python使用matplotlib函数subplot可视化多个不同颜色的折线图、在折线图上为每个数据点添加数值标签
Python使用matplotlib函数subplot可视化多个不同颜色的折线图.在折线图上为每个数据点添加数值标签 目录
- Python使用matplotlib可视化箱图、seaborn中的boxplot函数可视化分组箱图、在箱图中添加抖动数据点(Dot + Box Plot)
Python使用matplotlib可视化箱图.seaborn中的boxplot函数可视化分组箱图.在箱图中添加抖动数据点(Dot + Box Plot) 目录
最新文章
- HOWTO: InstallShield中通过修改注册表关闭Vista/Windows 7的UAC
- TCP/IP详解--第八章
- 首个由国内发起的分布式消息领域的国际标准OpenMessaging一周年回顾
- 性能调优:理解Set Statistics IO输出
- 突破C++瓶颈,在此一举!
- Chrome运行时性能瓶颈分析
- js拖动窗口 用层模拟可移动的小窗口
- Java动态规划---矩阵链相乘的最小计算代价
- 运维自动化之ansible playbook安装mysql
- windows通过注册表修改IP
- Telnet访问邮件服务器
- 计算机复制教程,教你如何提升电脑文件复制速度的详细教程
- JAVA毕业设计河南省农村多元化养老服务管理系统设计与实现计算机源码+lw文档+系统+调试部署+数据库
- 【渝粤教育】电大中专建筑施工技术作业 题库
- 苹果域对应关系 Manifest.db文件解析
- 全开源即时通讯(IM)系统 高仿微信
- 华为机试真题 Java实现【最短木板长度】【100%通过率】【2022.11 Q4 新题】
- Flutter控件——常用控件:按钮
- 英语流利说l4u1p2_L4-U1-P2-1Listening:ATriptoYosemitePark1 英语流利说 懂你英语
- [Arduino] Arduino猪头笔记