Python实现可视化的库非常多,比较常用的有:
-
Matplotlib:使用最广泛的绘图库,可满足大部分基础绘图需求。与Pandas结合非常好。
-
Seaborn:Seaborn建立在Matplotlib之上,与Matplotlib主要的区别是Seaborn的默认样式以及更美观、更现代的调色板设计。
-
ggplot:ggplot与Pandas紧密集成,操作更简单,但是牺牲了复杂性。
-
Plotly:Plotly提供了一些在大多数库中找不到的图表,如等高线图,树状图和三维图表。
-
Geoplotlib:Geoplotlib是用于创建地图和绘制地理数据的工具箱
-
Pyecharts:Echarts 是百度基于JavaScript 开源的可视化图表库,Pyecharts是一款将Python与echarts结合的强大的数据可视化工具,主要优势是支持的图形样式非常全,而且有丰富的主题可供选择,样式美观。
本文主要介绍Pyecharts的使用。
官网:
https://pyecharts.org/#/zh-cn/intro
特性:
- 简洁的 API 设计,使用如丝滑般流畅,支持链式调用
- 囊括了 30+ 种常见图表,应有尽有
- 支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab
- 可轻松集成至 Flask,Django 等主流 Web 框架
- 高度灵活的配置项,可轻松搭配出精美的图表
- 详细的文档和示例,帮助开发者更快的上手项目
- 多达 400+ 地图文件以及原生的百度地图,为地理数据可视化提供强有力的支持
一、安装
pip install pyecharts
二、基本图形的绘制
【例1】某公司2017-2021年的收入分别为:36000元、38000元、42000元、51000元、53000元,成本分别为:31000元、32000元、36000元、40000元、41000元。使用Pyecharts绘制2017-2021年收入成本柱状图。
第一步,导入相关模块
图表的类在charts,可根据图表类型导入。
from pyecharts.charts import Bar #导入柱状图
第二步,创建Bar实例
bar = Bar()
第三步,添加数据
bar.add_xaxis(["2017年", "2018年", "2019年", "2020年", "2021年"]) #设置x轴
bar.add_yaxis("收入", [36000, 38000, 42000, 51000, 53000]) #设置y轴
bar.add_yaxis("成本", [31000, 32000, 36000, 40000, 41000]) #设置y轴
第四步,保存html文件
bar.render() # 如果不指定路径,则默认在当前路径下生成一个render.html
render()默认将会在根目录下生成一个 render.html 的文件,也可以传入路径参数,设置文件保存位置,如 bar.render(r"C:\my_first_chart.html"),文件用浏览器打开。
全套代码为:
from pyecharts.charts import Bar #导入柱状图
#创建bar实例
bar = Bar()
#添加数据
bar.add_xaxis(["2017年", "2018年", "2019年", "2020年", "2021年"])
bar.add_yaxis("收入", [36000, 38000, 42000, 51000, 53000])
bar.add_yaxis("成本", [31000, 32000, 36000, 40000, 41000])
#生成html文件
bar.render() # 如果不指定路径,则默认在当前路径下生成一个render.html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I5tt57Yt-1656552375288)(https://files.mdnice.com/user/29206/b2174322-d8c5-4315-b8b5-d96078e1615f.png)]
pyecharts方法支持链式调用。
上述代码可改写成:
from pyecharts.charts import Bar
bar = (
Bar()
.add_xaxis(["2017年", "2018年", "2019年", "2020年", "2021年"]) #设置x轴
.add_yaxis("收入", [36000, 38000, 42000, 51000, 53000]) #设置y轴
.add_yaxis("成本", [31000, 32000, 36000, 40000, 41000]) #设置y轴
)
bar.render()
三、配置项
在 pyecharts中,一切皆配置(options)。pyecharts提供了丰富的配置项,包括全局配置项和系列配置项。
Pyecharts配置项引入方法:
from pyecharts import options as opts
(一)初始化配置
(1)先在初始化图表类型时进行初始化配置
init_opts=opts.InitOpts()
常用参数如下表所示
常用参数 | 说明 |
---|---|
width | str,图表画布宽度,如:width=‘900px’ |
height | str,图表画布高度,如:height=‘500px’ |
chart_id | str,图表id,图表唯一标识 |
theme | 图表主题 |
(2)进行主题定制
pyecharts内置提供了多种不同风格的主题,只需引入主题类型即可使用,主题类型引入方法:
from pyecharts.globals import ThemeType
设置主题方法:
theme=ThemeType.主题风格
内置主题如表所示:
CHALK | 粉笔风 |
---|---|
DARK | 暗黑风 |
ESSOS | 厄索斯大陆 |
INFOGRAPHIC | 信息图 |
LIGHT | 明亮风格 |
MACARONS | 马卡龙 |
PURPLE_PASSION | 紫色 |
ROMA | 石榴 |
ROMANTIC | 浪漫风 |
SHINE | 闪耀风 |
VINTAGE | 复古风 |
WALDEN | 瓦尔登湖 |
WESTEROS | 维斯特洛大陆 |
WHITE | 洁白风 |
WONDERLAND | 仙境 |
HALLOWEEN | 万圣节前夜 |
【例2】在例1图形的基础上,配置宽度为800px,高度为450px,主题为LIGHT
from pyecharts.charts import Bar #导入柱状图
from pyecharts import options as opts #导入配置项
from pyecharts.globals import ThemeType #导入主题类型
#创建bar实例,初始化配置,设置主题风格
bar = Bar(init_opts=opts.InitOpts(width='800px',height='450px',theme=ThemeType.LIGHT))
#添加数据
bar.add_xaxis(["2017年", "2018年", "2019年", "2020年", "2021年"])
bar.add_yaxis("收入", [36000, 38000, 42000, 51000, 53000])
bar.add_yaxis("成本", [31000, 32000, 36000, 40000, 41000])
#生成html文件
bar.render() # 如果不指定路径,则默认在当前路径下生成一个render.html
也可采用链式调用,代码如下:
from pyecharts.charts import Bar #导入柱状图
from pyecharts import options as opts #导入配置项
from pyecharts.globals import ThemeType #导入主题类型
bar = (
Bar(init_opts=opts.InitOpts(width='800px',height='450px',theme=ThemeType.LIGHT))
.add_xaxis(["2017年", "2018年", "2019年", "2020年", "2021年"])
.add_yaxis("收入", [36000, 38000, 42000, 51000, 53000])
.add_yaxis("成本", [31000, 32000, 36000, 40000, 41000])
)
#生成html文件
bar.render() # 如果不指定路径,则默认在当前路径下生成一个render.html
(二)全局配置项
全局配置项通过set_global_opts 方法设置
1、标题配置项
调用标题配置项:
title_opts=opts.TitleOpts()
常用参数如下表所示:
常用参数 | 说明 |
---|---|
title | 主标题 |
subtitle | 副标题 |
pos_left | 标题组件离容器左侧的距离 |
pos_right | 标题组件离容器右侧的距离 |
pos_top | 标题组件离容器上侧的距离 |
pos_bottom | 标题组件离容器下侧的距离 |
【例3】在例2图形的基础上,设置主标题为"收入成本图",副标题为"2017-2021年"
from pyecharts.charts import Bar #导入柱状图
from pyecharts import options as opts #导入配置项
from pyecharts.globals import ThemeType #导入主题类型
#创建bar实例,初始化配置,设置主题风格
bar = Bar(init_opts=opts.InitOpts(width='800px',height='450px',theme=ThemeType.LIGHT))
#添加数据
bar.add_xaxis(["2017年", "2018年", "2019年", "2020年", "2021年"])
bar.add_yaxis("收入", [36000, 38000, 42000, 51000, 53000])
bar.add_yaxis("成本", [31000, 32000, 36000, 40000, 41000])
#设置全局配置项
bar.set_global_opts(title_opts=opts.TitleOpts(title='收入成本图',subtitle='2017-2021年'))
#生成html文件
bar.render() # 如果不指定路径,则默认在当前路径下生成一个render.html
也可采用链式调用,代码如下:
from pyecharts.charts import Bar #导入柱状图
from pyecharts import options as opts #导入配置项
from pyecharts.globals import ThemeType #导入主题类型
bar = (
Bar(init_opts=opts.InitOpts(width='800px',height='450px',theme=ThemeType.LIGHT))
.add_xaxis(["2017年", "2018年", "2019年", "2020年", "2021年"])
.add_yaxis("收入", [36000, 38000, 42000, 51000, 53000])
.add_yaxis("成本", [31000, 32000, 36000, 40000, 41000])
.set_global_opts(title_opts=opts.TitleOpts(title='收入成本图',subtitle='2017-2021年'))
)
#生成html文件
bar.render() # 如果不指定路径,则默认在当前路径下生成一个render.html
2、图例设置项
调用图例配置项:
legend_opts=opts.LegendOpts()
常用参数如下表所示:
常用参数 | 说明 |
---|---|
type_ | 图例的类型,可选:默认’plain’,代表普通图例,‘scroll’,代表可滚动翻页的图例 |
is_show | 是否显示图例组件,默认为True |
pos_left | 图例组件离容器左侧的距离 |
pos_right | 图例组件离容器右侧的距离 |
pos_top | 图例组件离容器上侧的距离 |
pos_bottom | 图例组件离容器下侧的距离 |
orient | 图例列表的布局朝向,可选:默认’horizontal’水平,'vertical’垂直 |
3、坐标轴配置项
调用x、y轴配置项:
xaxis_opts=opts.AxisOpts()
yaxis_opts=opts.AxisOpts()
常用参数如下表所示:
常用参数 | 说明 |
---|---|
name | 坐标轴名称 |
is_show | 是否显示坐标轴,默认为True |
is_inverse | 是否反向坐标轴,默认为False |
name_location | 坐标轴名称显示位置,可选:‘start’,‘middle’,‘center’,‘end’,默认’enda’ |
name_gap | 坐标轴名称与轴线之间的距离,默认15 |
【例4】在例3图形的基础上,设置x轴名称分别为”年份“。
from pyecharts.charts import Bar #导入柱状图
from pyecharts import options as opts #导入配置项
from pyecharts.globals import ThemeType #导入主题类型
#创建bar实例,初始化配置,设置主题风格
bar = Bar(init_opts=opts.InitOpts(width='800px',height='450px',theme=ThemeType.LIGHT))
#添加数据
bar.add_xaxis(["2017年", "2018年", "2019年", "2020年", "2021年"])
bar.add_yaxis("收入", [36000, 38000, 42000, 51000, 53000])
bar.add_yaxis("成本", [31000, 32000, 36000, 40000, 41000])
#设置全局配置项
bar.set_global_opts(title_opts=opts.TitleOpts(title='收入成本图',subtitle='2017-2021年'),
xaxis_opts=opts.AxisOpts(name='年份'))
#生成html文件
bar.render() # 如果不指定路径,则默认在当前路径下生成一个render.html
也可采用链式调用,代码如下:
from pyecharts.charts import Bar #导入柱状图
from pyecharts import options as opts #导入配置项
from pyecharts.globals import ThemeType #导入主题类型
bar = (
Bar(init_opts=opts.InitOpts(width='800px',height='450px',theme=ThemeType.LIGHT))
.add_xaxis(["2017年", "2018年", "2019年", "2020年", "2021年"])
.add_yaxis("收入", [36000, 38000, 42000, 51000, 53000])
.add_yaxis("成本", [31000, 32000, 36000, 40000, 41000])
.set_global_opts(
title_opts=opts.TitleOpts(title='收入成本图',subtitle='2017-2021年'),
xaxis_opts=opts.AxisOpts(name='年份'))
)
#生成html文件
bar.render() # 如果不指定路径,则默认在当前路径下生成一个render.html
4、工具箱配置项
调用工具箱配置项:
toolbox_opts=opts.ToolboxOpts()
常用参数如下表所示:
常用参数 | 说明 |
---|---|
is_show | 是否显示工具箱组件,默认False |
orient | 工具箱的布局朝向,可选:默认’horizontal’水平,'vertical’垂直 |
pos_left | 工具箱组件离容器左侧的距离 |
pos_right | 工具箱组件离容器右侧的距离 |
pos_top | 工具箱组件离容器上侧的距离 |
pos_bottom | 工具箱组件离容器下侧的距离 |
通过工具箱可进行图形下载、区域缩放、图形转换等操作。
【例5】在例4图形的基础上,添加一个工具箱
from pyecharts.charts import Bar #导入柱状图
from pyecharts import options as opts #导入配置项
from pyecharts.globals import ThemeType #导入主题类型
#创建bar实例,初始化配置,设置主题风格
bar = Bar(init_opts=opts.InitOpts(width='800px',height='450px',theme=ThemeType.LIGHT))
#添加数据
bar.add_xaxis(["2017年", "2018年", "2019年", "2020年", "2021年"])
bar.add_yaxis("收入", [36000, 38000, 42000, 51000, 53000])
bar.add_yaxis("成本", [31000, 32000, 36000, 40000, 41000])
#设置全局配置项
bar.set_global_opts(title_opts=opts.TitleOpts(title='收入成本图',subtitle='2017-2021年'),
xaxis_opts=opts.AxisOpts(name='年份'),
toolbox_opts=opts.ToolboxOpts(is_show=True))
#生成html文件
bar.render() # 如果不指定路径,则默认在当前路径下生成一个render.html
(1)点击工具箱”数据视图“,可查看数据
(2)点击工具箱”切换为折线图“,图形显示为折线图。
也可采用链式调用,代码如下:
from pyecharts.charts import Bar #导入柱状图
from pyecharts import options as opts #导入配置项
from pyecharts.globals import ThemeType #导入主题类型
bar = (
Bar(init_opts=opts.InitOpts(width='800px',height='450px',theme=ThemeType.LIGHT))
.add_xaxis(["2017年", "2018年", "2019年", "2020年", "2021年"])
.add_yaxis("收入", [36000, 38000, 42000, 51000, 53000])
.add_yaxis("成本", [31000, 32000, 36000, 40000, 41000])
.set_global_opts(
title_opts=opts.TitleOpts(title='收入成本图',subtitle='2017-2021年'),
xaxis_opts=opts.AxisOpts(name='年份'),
toolbox_opts=opts.ToolboxOpts(is_show=True))
)
#生成html文件
bar.render() # 如果不指定路径,则默认在当前路径下生成一个render.html
(三)系列配置项
系列配置项通过set_series_opts
方法设置
1、标签配置项
调用标签配置项:
label_opts=opts.LabelOpts()
常用参数如下表所示:
常用参数 | 说明 |
---|---|
is_show | 是否显示标签,默认True |
positon | 标签位置,可选: ‘top’,‘left’,‘right’,‘bottom’,‘inside’,‘insideLeft’,‘insideRight’ |
color | 标签颜色 |
font_family | 标签字体 |
font_size | 标签字体大小 |
#label_opts表示标签选项参数
#options.LabelOpts表示配置标签选项的方法,可以配置颜色、字体、大小等
label_opts=options.LabelOpts(positon='right'))
【例6】在例5图形的基础上,将标签设置为在柱形内。
from pyecharts.charts import Bar #导入柱状图
from pyecharts import options as opts #导入配置项
from pyecharts.globals import ThemeType #导入主题类型
#创建bar实例,初始化配置,设置主题风格
bar = Bar(init_opts=opts.InitOpts(width='800px',height='450px',theme=ThemeType.LIGHT))
#添加数据
bar.add_xaxis(["2017年", "2018年", "2019年", "2020年", "2021年"])
bar.add_yaxis("收入", [36000, 38000, 42000, 51000, 53000])
bar.add_yaxis("成本", [31000, 32000, 36000, 40000, 41000])
#设置全局配置项
bar.set_global_opts(title_opts=opts.TitleOpts(title='收入成本图',subtitle='2017-2021年'),
xaxis_opts=opts.AxisOpts(name='年份'),
toolbox_opts=opts.ToolboxOpts(is_show=True))
#设置系列配置项
bar.set_series_opts(label_opts=opts.LabelOpts(position='inside'))
#生成html文件
bar.render() # 如果不指定路径,则默认在当前路径下生成一个render.html
也可采用链式调用,代码如下:
from pyecharts.charts import Bar #导入柱状图
from pyecharts import options as opts #导入配置项
from pyecharts.globals import ThemeType #导入主题类型
bar = (
Bar(init_opts=opts.InitOpts(width='800px',height='450px',theme=ThemeType.LIGHT))
.add_xaxis(["2017年", "2018年", "2019年", "2020年", "2021年"])
.add_yaxis("收入", [36000, 38000, 42000, 51000, 53000])
.add_yaxis("成本", [31000, 32000, 36000, 40000, 41000])
.set_global_opts(
title_opts=opts.TitleOpts(title='收入成本图',subtitle='2017-2021年'),
xaxis_opts=opts.AxisOpts(name='年份'),
toolbox_opts=opts.ToolboxOpts(is_show=True))
.set_series_opts(label_opts=opts.LabelOpts(position='inside'))
)
#生成html文件
bar.render() # 如果不指定路径,则默认在当前路径下生成一个render.html
四、坐标轴翻转
可使用reversal_axis()函数进行坐标轴翻转,纵向柱状图进行翻转后则生成横向柱状图。
【例7】在例6图形的基础上,对纵向柱状图进行翻转,生成横向柱状图
from pyecharts.charts import Bar #导入柱状图
from pyecharts import options as opts #导入配置项
from pyecharts.globals import ThemeType #导入主题类型
bar = (
Bar(init_opts=opts.InitOpts(width='800px',height='450px',theme=ThemeType.LIGHT))
.add_xaxis(["2017年", "2018年", "2019年", "2020年", "2021年"])
.add_yaxis("收入", [36000, 38000, 42000, 51000, 53000])
.add_yaxis("成本", [31000, 32000, 36000, 40000, 41000])
.set_global_opts(
title_opts=opts.TitleOpts(title='收入成本图',subtitle='2017-2021年'),
xaxis_opts=opts.AxisOpts(name='年份'),
toolbox_opts=opts.ToolboxOpts(is_show=True))
.set_series_opts(label_opts=opts.LabelOpts(position='inside'))
.reversal_axis()
)
#生成html文件
bar.render() # 如果不指定路径,则默认在当前路径下生成一个render.html