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图中相关推荐

  1. python bokeh_使用Bokeh在Python中进行交互式数据可视化

    python bokeh Bokeh prides itself on being a library for interactive data visualization. Bokeh以成为交互式数 ...

  2. python bokeh_使用 Bokeh 为你的 Python 绘图添加交互性

    本文字数:5051,阅读时长大约:6分钟 导读:在 Bokeh 中绘图比其他一些绘图库要复杂一些,但付出额外的努力是有回报的. https://linux.cn/article-12329-1.htm ...

  3. R语言ggplot2可视化图中添加希腊字母实战

    R语言ggplot2可视化图中添加希腊字母实战 目录 R语言ggplot2可视化图中添加希腊字母实战 #ggplot2可视化图中添加希腊字母1

  4. python可视化工具bokeh_浅谈python可视化包Bokeh

    本文研究的主要是python可视化包Bokeh的相关内容,具体如下. 问题:需要把pandas的数据绘图并通过网页显示,matplotlib需要先保存图像,不合适. 解决:在网上搜了一下,找到一篇介绍 ...

  5. python bokeh_浅谈python可视化包Bokeh

    本文研究的主要是python可视化包Bokeh的相关内容,具体如下. 问题:需要把pandas的数据绘图并通过网页显示,matplotlib需要先保存图像,不合适. 解决:在网上搜了一下,找到一篇介绍 ...

  6. Python使用matplotlib函数subplot可视化多个不同颜色的折线图、为指定的子图添加图例信息(legend)

    Python使用matplotlib函数subplot可视化多个不同颜色的折线图.为指定的子图添加图例信息(legend) 目录

  7. Python使用matplotlib函数subplot可视化多个不同颜色的折线图、在折线图上为每个数据点添加日期数据标签

    Python使用matplotlib函数subplot可视化多个不同颜色的折线图.在折线图上为每个数据点添加日期数据标签 目录

  8. Python使用matplotlib函数subplot可视化多个不同颜色的折线图、在折线图上为每个数据点添加数值标签

    Python使用matplotlib函数subplot可视化多个不同颜色的折线图.在折线图上为每个数据点添加数值标签 目录

  9. Python使用matplotlib可视化箱图、seaborn中的boxplot函数可视化分组箱图、在箱图中添加抖动数据点(Dot + Box Plot)

    Python使用matplotlib可视化箱图.seaborn中的boxplot函数可视化分组箱图.在箱图中添加抖动数据点(Dot + Box Plot) 目录

最新文章

  1. HOWTO: InstallShield中通过修改注册表关闭Vista/Windows 7的UAC
  2. TCP/IP详解--第八章
  3. 首个由国内发起的分布式消息领域的国际标准OpenMessaging一周年回顾
  4. 性能调优:理解Set Statistics IO输出
  5. 突破C++瓶颈,在此一举!
  6. Chrome运行时性能瓶颈分析
  7. js拖动窗口 用层模拟可移动的小窗口
  8. Java动态规划---矩阵链相乘的最小计算代价
  9. 运维自动化之ansible playbook安装mysql
  10. windows通过注册表修改IP
  11. Telnet访问邮件服务器
  12. 计算机复制教程,教你如何提升电脑文件复制速度的详细教程
  13. JAVA毕业设计河南省农村多元化养老服务管理系统设计与实现计算机源码+lw文档+系统+调试部署+数据库
  14. 【渝粤教育】电大中专建筑施工技术作业 题库
  15. 苹果域对应关系 Manifest.db文件解析
  16. 全开源即时通讯(IM)系统 高仿微信
  17. 华为机试真题 Java实现【最短木板长度】【100%通过率】【2022.11 Q4 新题】
  18. Flutter控件——常用控件:按钮
  19. 英语流利说l4u1p2_L4-U1-P2-1Listening:ATriptoYosemitePark1 英语流利说 懂你英语
  20. [Arduino] Arduino猪头笔记

热门文章

  1. 实战:自定义简易版SpringBoot
  2. Java本地缓存CaffeineCache集成
  3. 一文说清各种分布式一致性协议
  4. 关于Zookeeper和Redis实现分布式锁的异同
  5. python增删改查
  6. Unity-多核优化1-C#JobSystem
  7. 消息中间件Kafka与RabbitMQ谁更胜一筹?
  8. Sublime Text 常用环境和插件配置
  9. 不允许创建临时变量交换两个变量的内容
  10. 如何用各种编程语言杀死一条龙