一、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中显示图标
接下来查看数据
df = pd.read_csv('/Users/apple/Desktop/aagri/CME_Agri1.csv')
df.head()
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)
#显示图像
绘制步骤为:
-
首先使用figure方法建立一个画布,设置参数,定义画布的长宽以及 x、y的标签。
-
添加带有图例和线条粗细的线图渲染器,利用p.line()绘制折线图,定义折线图的颜色以及每条折线的标签参数。
-
调用相关方法绘制不同主题折线图,通过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)
使用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)
利用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="随机折线图"
)
#绘制折线图
步骤为:
-
首先需要导入pandas_bokeh包。
-
利用pd.DataFrame创建数据。
-
利用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)
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)
以上就是本文对python可视化库Bokeh的介绍,希望大家接下来可以自己进行操作,体验Bokeh用于数据可视化的魅力,并为大家的学习和工作提供一定的帮助!
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典