当前位置:   article > 正文

Python可视化-Bokeh库

bokeh

一、Bokeh的介绍

对于Python的可视化有多种库可以供我们使用,今天将要介绍Python中交互式可视化库Bokeh。我们可以用它绘制折线图、条形图、直方图、散点图、热力图等。相对于其他库,Bokeh最大的特点就在于它的交互性,用户可以通过滚轮、拖拽、点击、滑动等方式对数据进行缩放、选择、平移、悬停等操作来研究与分析,并且适合大数据集的可视化,将数据直接复制到浏览器中,直接在web浏览器中展示图表,适合做浏览网页的交互式图表。接下来我们将要正式介绍如何利用Bokeh来绘制图形。同样还将介绍 pandas-bokeh这一工具包,因其使用pandas数据结构所以快速做出动态交互式图且语法参数简单。

二、Bokeh绘图

我们根据1978年到2021年中国农业、林业、牧业、渔业的总生产总值的数据,利用Bokeh库进行绘制折线图、直方图以及散点图。

首先导入Bokeh库所必须的包

import numpy as np
import pandas as pd
from bokeh.plotting import figure, show
#保存图表
from bokeh.models import ColumnDataSource, HoverTool
#Hovertool用于鼠标指针悬停在数据上时显示值,ColumnDataSource为在Bokeh创建DataFrame
from bokeh.transform import dodge
from bokeh.io import output_notebook 
#在notebook中显示图标
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

接下来查看数据

df = pd.read_csv('/Users/apple/Desktop/aagri/CME_Agri1.csv')
df.head()
  • 1
  • 2

2.1. 绘制折线图

p = figure( title="农牧林渔业生产总值", plot_width=700, plot_height=400)
#建立了名为农牧林渔业生产总值,长700高400的长方形画布
p.line(df['time'], df['nongye'], line_color='blue', legend_label='农业')
p.line(df['time'], df['linye'], line_color='green', legend_label='林业')
p.line(df['time'], df['muye'], line_color='orange', legend_label='牧业')
p.line(df['time'], df['yuye'], line_color='red', legend_label='渔业')
#绘制折线图,定义折线颜色和标签
p.circle(df['time'], df['nongye'], size=6, color='#F78888', alpha=0.2, legend_label='point')
p.triangle(df['time'], df['linye'], size=6, color='#F78888', alpha=0.2, legend_label='point')
p.square(df['time'], df['yuye'], size=6, color='#F78888', alpha=0.2, legend_label='point')
p.circle(df['time'], df['muye'], size=6, color='#F78888', alpha=0.2, legend_label='point')
#绘制散点图,传入x,y坐标的数据,图像为圆形、三角形、正方形,然后定义标签,图形的大小
p.add_tools(HoverTool(tooltips=[("GDP", "$y")]))
#增加对应点的数值,表示为鼠标指针悬停在数据上时的显示值
p.grid.grid_line_alpha = 0.2
#网格大小
p.xaxis.axis_label = 'Date'
p.yaxis.axis_label = 'GDP'
#确定x,y轴标签
p.ygrid.band_fill_color="gray"
p.ygrid.band_fill_alpha = 0.1
#确定画布背景横格颜色以及强度
p.legend.location = "top_left"
#确定图标所在位置
p.legend.click_policy = "hide"
#增加交互性,点击图标隐藏
output_notebook()
show(p)
#显示图像
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

绘制步骤为:

  1. 首先使用figure方法建立一个画布,设置参数,定义画布的长宽以及 x、y的标签。

  2. 添加带有图例和线条粗细的线图渲染器,利用p.line()绘制折线图,定义折线图的颜色以及每条折线的标签参数。

  3. 调用相关方法绘制不同主题折线图,通过show()显示出来。

2.2. 绘制直方图

data = ColumnDataSource(df)
p = figure(title="农牧林渔业生产总值", plot_width=600, plot_height=400)
#建立了名为农牧林渔业生产总值,长600高400的长方形画布
p.vbar(x=dodge('time', -0.25, range=p.x_range), top='nongye', width=0.2, color="lightgrey", 
       legend_label="农业", source=data)
p.vbar(x=dodge('time', 0, range=p.x_range), top='linye', width=0.2, color="lightgreen", 
       legend_label="林业", source=data)
p.vbar(x=dodge('time', 0.25, range=p.x_range), top='muye', width=0.2, color="RoyalBlue", 
       legend_label="牧业", source=data)
p.vbar(x=dodge('time', 0.50, range=p.x_range), top='yuye', width=0.2, color="lightpink", 
       legend_label="渔业", source=data)
#绘制直方图,定义图像宽度颜色和标签
p.xgrid.grid_line_color = None
p.y_range.start = 0
#确定直方图y起始值
p.ygrid.band_fill_color = "olive"
p.ygrid.band_fill_alpha = 0.1
p.legend.click_policy = "hide"
p.legend.location = "top_left"
p.xaxis.axis_label = 'Date'
p.yaxis.axis_label = 'GDP'
p.add_tools(HoverTool(tooltips=[("时间", "@time"), ("农业GDP", "@{nongye}"), 
                                ("林业GDP", "@{linye}"), ("牧业GDP", "@{muye}"),("渔业GDP", "@{yuye}")]))
output_notebook()
show(p)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

使用ColumnDataSource来创建图表,利用p.vbar()来创建直方图,width参数定义直方图的宽度,top参数定义填充的y值大小。2.3. 绘制散点图

p = figure(title="农牧林渔业生产总值",plot_width=600, plot_height=400)
#建立了名为农牧林渔业生产总值,长600高400的长方形画布
p.circle(df["time"],df["nongye"],color='red', fill_alpha=0.3,size=12,legend_label="农业")
p.circle(df["time"],df["linye"],color='green', fill_alpha=0.3,size=12,legend_label="林业")
p.circle(df["time"],df["muye"],color='blue', fill_alpha=0.3,size=12,legend_label="牧业")
p.circle(df["time"],df["yuye"],color='yellow', fill_alpha=0.3,size=12,legend_label="渔业")
#绘制散点图,确定点的颜色大小标签
p.legend.click_policy = "hide"
p.legend.location = "top_left"
p.xaxis.axis_label = 'Date'
p.yaxis.axis_label = 'GDP'
p.add_tools(HoverTool(tooltips=[("GDP", "$y")]))

show(p)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

利用p.circle()来创建散点图,fill_alpha参数定义点的颜色内部填充程度,size参数定义点的大小。

三、pandas_bokeh绘图

Pandas-bokeh将进行数据分析和处理的Pandas以及交互式绘图的Bokeh相结合。使用pandas数据结构,可以轻松在数据框中选择可视化,可以使得dataframe直接调用Bokeh底层代码。语法参数简单,语法相对于bokeh更加简洁。其调用语法和 pandas 自身的df.plot十分类似,导入 pandas_bokeh 库会在 pandas 的 DataFrames 和 Series 上添加一个补充的绘图方法 plot_bokeh()。

我们采取生成随机生成序列的方式,利用pandas_bokeh进行折线图、直方图以及散点图的绘制。

3.1. 绘制折线图

import numpy as np
import pandas as pd
import pandas_bokeh
#导入pandas_bokeh
from bokeh.plotting import figure, show
df = pd.DataFrame({
    'Year': np.arange(2010, 2020),
    'A': np.random.randint(100, 600, 10),
    'B' : np.random.randint(100, 600, 10),
    'C' : np.random.randint(100, 600, 10)
})
#建立随机生成的DataFrame时间序列
df.plot_bokeh.line(
    x='Year', 
    zooming=True,
    #布尔值,默认True支持缩放
    panning=True,
    #布尔值,默认True支持平移
    show_figure = True,
    plot_data_points=True,
    plot_data_points_size=6,
    #确定折线图中每个数据点以及大小
    title="随机折线图"
)
#绘制折线图
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

步骤为:

  1. 首先需要导入pandas_bokeh包。

  2. 利用pd.DataFrame创建数据。

  3. 利用df.plot_bokeh.line()生成图表。

3.2. 绘制直方图

data = {
    'name':
    ['Jenny', 'Jack', 'Rose', 'Mark', 'Betty', 'Lia'],
    'Math': [87, 64, 69, 75, 99, 80],
    'English': [75, 63, 83, 92, 94, 66],
    'Science': [63, 92, 84, 84, 75, 83]
}
df = pd.DataFrame(data).set_index("name")
p_bar = df.plot_bokeh.bar(ylabel="Score", title=" score of class 2",alpha=0.6)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3.3.绘制散点图

df = pd.DataFrame({
    'x':np.random.random(size=1000) * 100,
    'y':np.random.random(size=1000) * 100,
})
p_scatter = df.plot_bokeh.scatter(x="x",y="y",title="随机散点图",show_figure=True)
  • 1
  • 2
  • 3
  • 4
  • 5

以上就是本文对python可视化库Bokeh的介绍,希望大家接下来可以自己进行操作,体验Bokeh用于数据可视化的魅力,并为大家的学习和工作提供一定的帮助!

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
若有侵权,请联系删除
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/643962
推荐阅读
相关标签
  

闽ICP备14008679号