什么是Pyecharts?Pyecharts是百度开源数据可视化项目与Python 的有效结合,具有良好的交互性,精巧的图表设计,在创建具有交互式图表时,成为数据可视化首选工具。
本文创建一组成绩数据,使用Pyecharts创建“一页纸报告”,分别使用不同的交互式图表分析学生成绩,下面一起来学习。
示例工具:anconda3.7
本文讲解内容:pyecharts图表创建
适用范围:交互式图表创建
查看版本
本节的案例均使用的是pyecharts1.9版本,如果没有这个包,可以在命令行输入如下的命令指定下载。
一页纸报告获取
公众号后台回复
2214
获取本节一页纸报告
数据创建
本节构建一组数据,数据内容是包含近几次的一名理科生的月考成绩,数据结果如下所示。
import pandas asdf=pd.DataFrame({'语文':[91,92,79,100],'数学':[112,85,82,34],'英语':[87.5,92.5,75,56.25],'物理':[77,102,65,71],'化学':[79,72,66,68],'生物':[80,90,70,53],'总分':[670.5,443.5,531,382.25]},'2021-05-06','2021-06-09','2021-07-12','2021-10-08'])df
表格
将成绩表生成一张表格,导入Table。
from pyecharts.components importfrom pyecharts.options import
导入表头和数据行即可。
#表格table = Table()headers = df.columns.tolist()rows = [df.iloc[0].tolist(),df.iloc[1].tolist(),df.iloc[2].tolist(),df.iloc[3].tolist()]
table.add(headers, rows)table.set_global_opts(title_opts=ComponentTitleOpts(title="成绩表"))table.render_notebook()
折线图
分析每次月考的总分趋势情况,做折线图,这里导入Line。
from pyecharts import options asfrom pyecharts.charts import
pyecharts支持链式调用,.add_xaxis用于添加横坐标轴数据,.add_yaxis用于添加纵坐标轴数据,.set_global_opts用于设置图表区格式,.render_notebook()将图表在线显示,.render(line.html)将图表导出为网页。
#折线图line = (Line() .add_xaxis(df.index.tolist())"总分", df['总分'].tolist(), is_smooth=True)#平滑曲线"总分趋势折线图"),#添加滚动条 )line.render_notebook()
柱形图
分析每一次月考各科成绩的变化,做柱形图,这里导入Bar。
from pyecharts import options asfrom pyecharts.charts import
分别导入各科的成绩,导入横坐标轴数据和纵坐标轴数据,并设置图表格式,.set_series_opts用于设置数据系列格式,比如这里添加数据标注。
#柱形图bar = (Bar() .add_xaxis(df.index.tolist())"语文", df['语文'].tolist(),category_gap="20%",gap="10%")#单系列柱间距离"数学", df['数学'].tolist(),category_gap="20%",gap="10%")"英语", df['英语'].tolist(),category_gap="20%",gap="10%")"物理", df['物理'].tolist(),category_gap="20%",gap="10%")"化学", df['化学'].tolist(),category_gap="20%",gap="10%")"生物", df['生物'].tolist(),category_gap="20%",gap="10%")
.set_global_opts(#X轴坐标旋转"Bar-旋转X轴标签"),#添加标题#添加滚动条#添加工具箱#数据标签标注"max", name="最大值"),"min", name="最小值"),"average", name="平均值")])) )bar.render_notebook()
组合图
查看每一次月考语文成绩与总分的对比关系,这里使用组合图,分别绘制柱形图和折线图,使用overlap函数进行拼接。
from pyecharts import options asfrom pyecharts.charts import
组合图的使用,重点是设置主坐标轴和次坐标轴,.extend_axis用于设置图表的次坐标轴,yaxis_opts用于设置图表的主坐标轴。
v1 = df['语文'].tolist()v2 = df['总分'].tolist()#柱形图bar = (Bar() .add_xaxis(df.index.tolist())"语文", v1 ,category_gap="60%",gap="10%") #设置柱形间隙宽度"{value} 分"), min_=0,max_=700))#设置次坐标轴坐标大小#显示数据标签"语文成绩与总分数组合图"),#添加滚动条"{value} 分"),min_=0,max_=190)))#设置主坐标轴坐标大小#折线图line = Line().add_xaxis(df.index.tolist()).add_yaxis("总分", v2, yaxis_index=1, is_smooth=True)#组合图bar.overlap(line)bar.render_notebook()
雷达图
查看期中考试和第二次月考各科的成绩情况,这里使用雷达图,导入Radar。
from pyecharts import options asfrom pyecharts.charts import
使用雷达图需分别设置每个坐标点的最大值范围,使用.add_schema函数分别进行设置。
#雷达图v1 = [df.loc['2021-10-08'][['语文','数学','英语','物理','化学','生物']].values.tolist()]v2 = [df.loc['2021-07-12'][['语文','数学','英语','物理','化学','生物']].values.tolist()]leida = (Radar() .add_schema( schema=["语文", max_=150),"数学", max_=150),"英语", max_=150),"物理", max_=100),"化学", max_=100),"生物", max_=100),])add("期中考试", v1)add("第二次月考", v2) .set_series_opts(label_opts=opts.LabelOpts(is_show=False)) .set_global_opts("single"),"成绩雷达图")) )leida.render_notebook()
图表布局
图表生成后,通常我们要将其整理为“一页纸报告”,这里导入Page。
#Page切换from pyecharts import options asfrom pyecharts.charts importfrom pyecharts.components importfrom pyecharts.options import
分别做出每一个图表,然后使用page函数进行封装。
#表格table = Table()headers = df.columns.tolist()rows = [df.iloc[0].tolist(),df.iloc[1].tolist(),df.iloc[2].tolist(),df.iloc[3].tolist()]
table.add(headers, rows)table.set_global_opts(title_opts=ComponentTitleOpts(title="Table-基本示例", subtitle="我是副标题支持换行哦"))#折线图line = (Line() .add_xaxis(df.index.tolist())"总分", df['总分'].tolist(), is_smooth=True)"总分趋势折线图"),#添加滚动条) )#柱形图bar = (Bar() .add_xaxis(df.index.tolist())"语文", df['语文'].tolist(),category_gap="20%",gap="10%")#单系列柱间距离"数学", df['数学'].tolist(),category_gap="20%",gap="10%")"英语", df['英语'].tolist(),category_gap="20%",gap="10%")"物理", df['物理'].tolist(),category_gap="20%",gap="10%")"化学", df['化学'].tolist(),category_gap="20%",gap="10%")"生物", df['生物'].tolist(),category_gap="20%",gap="10%")
#X轴坐标旋转"Bar-旋转X轴标签", subtitle="解决标签名字过长的问题"),#添加标题#添加滚动条#添加工具箱#数据标签标注"max", name="最大值"),"min", name="最小值"),"average", name="平均值")])) )#雷达图v1 = [df.loc['2021-10-08'][['语文','数学','英语','物理','化学','生物']].values.tolist()]v2 = [df.loc['2021-07-12'][['语文','数学','英语','物理','化学','生物']].values.tolist()]leida = (Radar() .add_schema( schema=["语文", max_=150),"数学", max_=150),"英语", max_=150),"物理", max_=100),"化学", max_=100),"生物", max_=100)])"期中考试", v1)"第二次月考", v2) .set_series_opts(label_opts=opts.LabelOpts(is_show=False))"single"),"成绩雷达图")))#页面布局page = (Page(layout=Page.DraggablePageLayout) .add(table) .add(line) .add(bar) .add(leida))#文件导出page.render(r'C:\Users\尚天强\Desktop\111.html')
做出的一页纸报告如下,默认的图表布局右侧有很多的空白区域,且图表大小是固定的。
自定义图表大小
打开.html文件,拖动图表设置图表大小,图形排列整齐后,点击save config按钮,生成一个chart_config.json的配置文件。
运行如下的代码,可以将图形的格式固定下来,从而生成一个完美的DashBoard仪表盘。
Page.save_resize_html(r'C:\Users\尚天强\Desktop\111.html', # 最先生成的HTML文件路径r"C:\Users\尚天强\Desktop\chart_config.json", # 保存本地json配置文件路径r"C:\Users\尚天强\Desktop\222.html") # 导出图表排列后的HTML文件
自定义图表布局后的图表如下。
使用Pyecharts生成的一页纸报告具有交互性,交互方式如下。
动图演示