pyecharts 图表自动生成
今天我又是一个 lsp,分享二次元老婆的第二天
前言
当我在慵懒这条路上越走越远的时候,一个个花花绿绿的图表又跳了出来,这这这,这可让我如何是好啊!!!我可是一个永远走在慵懒路上的人,岂能因为一个漂亮图表就心动???
废话少说,不能只是让我心动,我们一起来心动!!!
第一个图表文件(柱状图)
首先我们需要先安装一个库(pyecharts):pip install pyecharts -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
我们来定义一个柱状图创建场景,一至六班为横坐标,每个班级的男生人数为纵坐标
此时我们只需要写明头文件:from pyecharts.charts import Bar
,此代码的意义是从 pyecharts
库的 charts
组件中导入 Bar
(柱状图) 类
我们新建工程项目(xiaohan1),新建 python 文件(part1.py)
part1.py
文件如下:
from pyecharts.charts import Bar
# 从 pyecharts 库的 charts 组件中导入 Bar (柱状图) 类
# 1. 实例化类对象
bar = Bar()
# 2. 准备图表数据 (横纵坐标内容)
class_list = ["一班", "二班", "三班", "四班", "五班"]
boy_list = [20, 23, 33, 30, 17]
# 3. 关联图表和数据
bar.add_xaxis(class_list)
bar.add_yaxis("男生人数", boy_list)
# * 数据渲染--生成数据
bar.render("图表\\男生柱状图.html")
代码 class_list = ["一班", "二班", "三班", "四班", "五班"]
,是一个列表(其中有多个字符串数据),横坐标数据若是字符串类型最好加上单(双)引号,代码 bar.add_yaxis("男生人数", boy_list)
,第一个参数代表纵坐标表示的对象(男生人数),第二个参数表示相对应的纵坐标数值大小(如第一个数值 20 对应一班男生的人数),代码 bar.render("图表\\男生柱状图.html")
,可以将图表生成为一个后缀为 html 的文件(浏览器打开的文件)
男生柱状图.html
文件在浏览器打开的过程如下:
- 右键 男生柱状图.html 文件
- 找到名为 打开于 的选项并点开
- 找到名为 浏览器 的选项并点开
- 然后选择一个浏览器即可
男生柱状图.html
文件经浏览器渲染后的结果如下:
但是,但是!!!很严肃的一个话题哈,这六个班级只有男孩子嘛???奇奇怪怪的,女孩子哪去了,这么稀有的动物,一个班级怎么能没有!!!于是我来修改一下 part1.py 文件
part1.py
文件新增及修改内容如下:
# 新增内容
# 2. 准备图表数据 (横纵坐标内容)
girl_list = [30, 27, 17, 20, 33]
# 3. 关联图表和数据
bar.add_yaxis("女生人数", girl_list)
# 修改内容
# * 数据渲染--生成数据
bar.render("图表\\男女生柱状图.html")
男女生柱状图.html
文件经浏览器渲染后的结果如下:
相信大家会考虑柱形的排版及对称问题(横坐标为什么一定落在相对应的二个柱形中间),其实我也不知道,哈哈哈!!!若是你们知道,就可以告诉我,一定感谢!!!
图表的全局选项设置
part1.py
文件新增内容如下:
# 头文件
from pyecharts import options
# 4.1 全局设置
bar.set_global_opts(
# 设置标题信息
title_opts=options.TitleOpts(title="一年级一班到六班", subtitle="男生人数和女生人数"),
# 显示工具栏
toolbox_opts=options.ToolboxOpts())
头文件 from pyecharts import options
表示从 pyecharts
库中导入 options 模块,代码 bar.set_global_opts()
,表示对实例化柱状图对象设置全局选项,代码 title_opts=options.TitleOpts(title="一年级一班到六班", subtitle="男生人数和女生人数")
,表示设置标题(title_opts),且需要调用 options
模块的 TitleOpts
方法,TitleOpts
方法有二个参数,第一个表示标题(title),第二个表示副标题(subtitle)
男女生柱状图.html
文件设置全局选项经浏览器渲染后的结果如下:
可以发现左上角多了二栏(标题和副标题),右上角多了工具栏,至于有哪些工具及工具有什么功能则需要自己动手来实践了
图表的系列(局部)选项设置
part1.py
文件新增内容如下:
# 4.2 系列设置
bar.set_series_opts(
# 设置柱形顶部数值是否显示
label_opts=options.LabelOpts(is_show=False),
# 添加标记点
markpoint_opts=options.MarkPointOpts(data=[
options.MarkPointItem(type_="min", name="最小值"),
options.MarkPointItem(type_="max", name="最大值")
]))
代码 bar.set_series_opts()
表示设置系列(局部)选项,代码 label_opts=options.LabelOpts(is_show=False)
,表示设置标签(label_opts),且需要调用 options
模块的 TitleOpts
方法,LabelOpts
方法有一个参数,表示数值是否显示,代码 markpoint_opts=options.MarkPointOpts(data=[ options.MarkPointItem(type_="min", name="最小值"), options.MarkPointItem(type_="max", name="最大值") ])
,表示设置标记(markpoint_opts),且需要调用 options
模块的 MarkPointOpts
方法,MarkPointOpts
方法有一个参数(data=[options.MarkPointItem(type_="min", name="最小值"), options.MarkPointItem(type_="max", name="最大值")]
,参数被一个列表赋值,列表里用方法 options.MarkPointItem
来设置标记,且它有二个参数,第一个是属性(min 或 max),第二个是显示文本(即鼠标放在当前标记的时候特殊的文字)
男女生柱状图.html
文件设置局部选项经浏览器渲染后的结果如下:
可以看见在二类柱形中分别出现了最大值和最小值的标记,且当鼠标放在红色柱形(标记为33的圈圈上时),显示了文本最大值(特殊文字)
我们来定义一个饼状图创建场景,武汉市早中晚及凌晨某超市人数流动量,占比为饼图的大小
此时我们只需要写明头文件:from pyecharts.charts import Pie
,此代码的意义是从 pyecharts 库的 charts 组件中导入 Pie (饼状图) 类
在工程项目(xiaohan1)下,新建 python 文件(part2.py)
part2.py
文件如下:
from pyecharts.charts import Pie
# 1. 实例化饼状图对象
pie = Pie()
# 2. 准备数据
pie_list = [("早上", 1200), ("中午", 2400), ("晚上", 3700), ("凌晨", 900)]
# 3. 创建关联
pie.add(
# 设置系列名称
series_name="人数",
# 设置需要展示的数据
data_pair=pie_list)
# * 数据渲染--生成数据
pie.render("图表\\武汉早中晚及凌晨人数流量.html")
代码 pie_list = [("早上", 1200), ("中午", 2400), ("晚上", 3700), ("凌晨", 900)]
,里面有四个元组,每个元组对应一个饼,代码 pie.add(series_name="人数",data_pair=pie_list)
,第一个参数代表饼图显示的名字,相当于柱状图的纵坐标,第二个参数代表导入的数据
武汉早中晚及凌晨人数流量.html
文件经浏览器渲染后的结果如下:
当鼠标放在中午这块饼上面的时候,可以发现,有饼图的名字(人数)和传入的数据(中午:2400)
图表的二个小方法
年轻人不讲武德!马上给大家看几个刺激的!!!
第一个小方法,使饼成为饼环
part2.py
文件修改内容如下:
# 修改内容
# 3. 创建关联
pie.add(
# 设置系列名称
series_name="人数",
# 设置需要展示的数据
data_pair=pie_list,
# 设置圆环空心部分和非空心部分的比例
radius=["30%", "70%"])
武汉早中晚及凌晨人数流量.html
文件经浏览器渲染后的结果如下:
第二个小方法,使每个饼的比例不一样大
part2.py
文件修改内容如下:
# 修改内容
# 3. 创建关联
pie.add(
# 设置系列名称
series_name="人数",
# 设置需要展示的数据
data_pair=pie_list,
# 设置圆环空心部分和非空心部分的比例
radius=["30%", "70%"],
# 设置饼是不规则的
rosetype="radius")
武汉早中晚及凌晨人数流量.html
文件经浏览器渲染后的结果如下:
图表的系列(局部)选项设置
我们来设置一下饼的所占百分比
part2.py
文件新增内容如下:
# 头文件
from pyecharts import options
# 新增内容
# 4. 局部设置
pie.set_series_opts(label_opts=options.LabelOpts(formatter="{b}:{d}%"))
头文件 from pyecharts import options
表示从 pyecharts
库中导入 options
模块,代码 pie.set_series_opts(label_opts=options.LabelOpts(formatter="{b}:{d}%"))
表示设置局部选项(set_series_opts),label_opts
表示设置标签,利用 options
模块,且需要调用 LabelOpts
方法,此方法有一个参数,代表格式, {b}
表示导入的元数据(早上…),{d}%
表示百分比
武汉早中晚及凌晨人数流量.html
文件经浏览器渲染后的结果如下:
第三个图表文件(折线图)
沿用第一个图表文件(柱状图)的场景
此时我们只需要写明头文件:from pyecharts.charts import Line
,此代码的意义是从 pyecharts
库的 charts
组件中导入 Line (折线图) 类
在工程项目(xiaohan1)下,新建 python 文件(part3.py)
part3.py
文件如下:
from pyecharts.charts import Line
# 1. 实例化对象
line = Line()
# 2. 准备图表数据 (横纵坐标内容)
class_list = ["一班", "二班", "三班", "四班", "五班"]
boy_list = [20, 23, 33, 30, 17]
girl_list = [30, 27, 17, 20, 33]
# 3. 创建关联
line.add_xaxis(class_list)
line.add_yaxis("男生", boy_list)
line.add_yaxis("女生", girl_list)
# * 数据渲染--生成数据
line.render("图表\\男女生折线图.html")
男女生折线图.html
文件经浏览器渲染后的结果如下:
图表的系列(局部)的局部选项设置
第一个局部设置:让男生的折线平滑
part3.py
文件修改内容如下:
# 修改内容
# 3. 创建关联
line.add_yaxis("男生", boy_list, is_smooth=True)
男女生折线图.html
文件经浏览器渲染后的结果如下:
第二个局部设置:给女生数值增加平均值线
part3.py
文件新增及修改内容如下:
# 新增内容
# 头文件
from pyecharts import options
# 修改内容
# 3. 创建关联
line.add_yaxis("女生", girl_list, markline_opts=options.MarkLineOpts(
data=[options.MarkLineItem(type_="average")]))
男女生折线图.html
文件经浏览器渲染后的结果如下:
第三个局部设置:给男生数值增加最大值点
part3.py
文件新增及修改内容如下:
# 新增内容
# 头文件
from pyecharts import options
# 修改内容
# 3. 创建关联
line.add_yaxis("男生", boy_list, is_smooth=True, markpoint_opts=options.MarkPointOpts(
data=[options.MarkPointItem(type_="max")]))
男女生折线图.html
文件经浏览器渲染后的结果如下:
图表的系列(局部)的选项设置
局部设置:给男生女生都增加中位数线且给它命名为中位数
part3.py
文件新增及修改内容如下:
# 新增内容
# 头文件
from pyecharts import options
# 4. 局部设置
line.set_series_opts(markline_opts=options.MarkLineOpts(data=[options.MarkLineItem(type_="median", name="中位数")]))
男女生折线图.html
文件经浏览器渲染后的结果如下:
第四个图表文件(地图)
我们来定义一个地图创建场景(各省市的疫情人数)
此时我们只需要写明头文件:from pyecharts.charts import Map
,此代码的意义是从 pyecharts
库的 charts
组件中导入 Map
(地图) 类
在工程项目(xiaohan1)下,新建 python 文件(part4.py)
part4.py
文件如下
from pyecharts.charts import Map
# 1. 实例化类对象
map1 = Map()
# 2. 准备数据
num_list = [("湖北", 2100), ("四川", 300), ("广东", 900), ("河北", 1200)]
# 3. 创建关联
map1.add("疫情数据", num_list, "china")
# * 数据渲染--生成数据
map1.render("图表\\疫情分布地图.html")
疫情分布地图.html
文件经浏览器渲染后的结果如下:
图表的全局选项设置
part3.py
文件新增内容如下:
# 新增内容
# 头文件
from pyecharts import options
# 4. 全局设置
map1.set_global_opts(
# 设置颜色标记范围
visualmap_opts=options.VisualMapOpts(max_=2000, is_piecewise=True),
# 隐藏顶部的数据导航显示
legend_opts=options.LegendOpts(is_show=False),
# 设置标题
title_opts=options.TitleOpts(title="全国范围内", subtitle="疫情数据"))
疫情分布地图.html
文件经浏览器渲染后的结果如下:
组合图
我们用此前的柱状图和折线图创建组合图表
在工程项目(xiaohan1)下,新建 python 文件(part5.py)
part5.py
文件如下
from pyecharts.charts import Bar, Line, Grid
from pyecharts import options
# 1. 准备图表数据
class_list = ["一班", "二班", "三班", "四班", "五班"]
boy_list = [20, 23, 33, 30, 17]
girl_list = [30, 27, 17, 20, 33]
# 2. 创建实例化对象
bar = Bar()
line = Line()
# 3. 创建关联
bar.add_xaxis(class_list)
bar.add_yaxis("男生", boy_list)
bar.add_yaxis("女生", girl_list)
line.add_xaxis(class_list)
line.add_yaxis("男生", boy_list)
line.add_yaxis("女生", girl_list)
# 4. 创建组合类对象
grid = Grid()
# 5. 添加图表到组合类对象中
grid.add(bar, grid_opts=options.GridOpts(pos_bottom="60%"))
grid.add(line, grid_opts=options.GridOpts(pos_top="60%"))
# 6. 渲染数据 得到图表
grid.render("图表\\组合图.html")
组合图.html
文件经浏览器渲染后的结果如下: