一、pyecharts模块
安装
pip install pyecharts==1.8.1
导入并创建一个对象
#从pyecharts.charts中导入Bar模块
from pyecharts.charts import Bar
#创建一个柱状图Bar对象并赋值给变量bar
bar=Bar()
补充知识:浮点数取近似值
round(x,n):对浮点数x进行近似取值,并保留n位小数的函数(n可选,默认保留到整数)。
添加x/y轴数据
①添加x轴数据--bar.add_xaxis()
#参数xaxis_data:命名参数,类型为列表,列表中的元素顺序表示柱状图x轴从左到右的刻度
bar.add_xaxis(xaxis_data=name)
②添加y轴数据--bar.add_yaxis()
#参数y_axis:命名参数,类型为列表
#参数series_name:设置图例名称参数,必选添加。图例名称用于区分柱状图,在图表中呈现不同的颜色,并且默认显示在图表上方
bar.add_yaxis(series_name="赞粉比", y_axis=ratioList)
#平滑折线图,添加参数is_smooth=True
line.add_yaxis(series_name=name,y_axis=likes,is_smooth=True)
保存图表--render()
使用render()函数可以将图表以HTML格式存储在代码所在的文件夹内。
#bar.render("路径")
bar.render("/Users/Yoyo/Desktop/fans_likes.html")
二、全局配置项
导入
from pyecharts import options as opts
标题设置
bar.set_global_opts(title_opts=opts.TitleOpts(title="候选博主粉丝与点赞的对比"))
在TitleOpts中添加不同的参数,可以对坐标轴的样式进行相应的配置,例如:
title:设置标题文本
subtitle:副标题文本
pos_left:距离容器的左边距
pos_right:距离容器的右边距
坐标轴配置项--旋转x轴标签
# 初始化一个AxisOpts对象,设置标签旋转45度
bar.set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts={"rotate":45}))
在AxisOpts中添加不同的参数,可以对坐标轴的样式进行相应的配置,例如:
axislabel_opts:设置坐标轴标签,参数类型为字典
position:设置坐标轴位置
max_:设置坐标轴最大值
三、绘制折线图
#从pyecharts.charts中导入Line
from pyecharts.charts import Line
#创建一个折线图Line对象,并赋值给变量line
line = Line()
# 近10篇笔记的点赞量数据存入列表likes中
likes = [71,429,150,2214,626,1597,773,10000,1947,2275]
# 将博主姓名赋值给变量name
name = "菠萝冰和夏天"
# 将最近10篇笔记的名字存入列表并赋值给变量page
page = ["近10篇","近9篇","近8篇","近7篇","近6篇","近5篇","近4篇","近3篇","近2篇","近1篇"]
#给折线图添加x轴数据,数据内容是笔记名字:page
line.add_xaxis(xaxis_data=page)
#给折线图添加y轴数据,数据内容是点赞量列表:likes,图例名称为博主姓名:name
line.add_yaxis(y_axis=likes,series_name=name)
#绘制出这条折线图,并保存到/Users/Yoyo/中,文件名称为line.html
line.render("/Users/Yoyo/line.html")
四、绘制看板组合
# 从pyecharts.charts中导入Line,Tab
from pyecharts.charts import Line,Tab
# 创建一个组件Tab对象,赋值给变量tab
tab = Tab()
#使用tab.add(图表,标签名)添加图表
tab.add(line,"点赞折线图")
五、y轴配置项--设置y轴最大值
# 用set_global_opts进行y轴配置,初始化一个AxisOpts对象,设置最大值为13000:
line.set_global_opts(yaxis_opts= opts.AxisOpts(max_ = 13000))
六、初始化配置项--主题配置
line=Line(init_opts = opts.InitOpts(theme="dark"))
七、帕累托图
本质是一个柱状图和一个折线图的叠加。
帕累托图,是基于“帕累托法则”而建立的一种专业图表形式,专门用于识别最有影响的因子类别。
帕累托图是如何描述和识别最有影响的因子类别?
①柱状图部分,将各个原因,按照数量(也就是频次)从大到小排列。最左边,就是最重要的原因;最右边是最不重要的原因。
②折线图部分是各个问题的频率累计的结果。按重要性排序,如果从最重要的问题开始解决,能一共解决多大程度的影响。一般来说,80%是一个分界线。
字典排序
# 根据字典value的大小,对knowledge的元素进行降序排序,然后结果赋值给result
#使用sorted()函数,传入字典使用items()函数的返回值、key、reverse这3个参数,对字典knowledge排序。
#key = lambda item:item[1],就是将每一个元组中第二个元素,作为排序依据。
result = sorted(knowledge.items(),key = lambda item:item[1],reverse=True)
sorted()函数:对传入的列表进行排序。
字典.items():将字典中的键值,转化为一个元组的形式。
key参数:需要传入一个函数,函数用于指定进行比较的依据,可以传入一个函数,或者在此定义一个匿名函数
reverse参数:reverse=True,降序排序 reverse=False,升序排序
绘制柱状图
绘制折线图
绘制叠加图
两张图表如果要进行叠加,就需要对其中一个图表使用overlap()函数,然后将另一个图表的对象作为参数传入。
# 对bar使用overlap()函数,传入line,就是在柱状图的基础上叠加折线图
bar.overlap(line)
新增y轴
对bar,需要使用extend_axis函数,拓展一条坐标轴的位置
对line,需要在add_yaxis函数中,注明yaxis_index=1,表示使用第2条y轴(轴的索引从0开始)。
# 使用extend_axis函数,参数yaxis传入坐标轴配置项opts.AxisOpts()
bar.extend_axis(yaxis=opts.AxisOpts())
# 使用add_yaxis函数,设置图例名称参数series_name为"扣分占比",传入percentlist作为y轴数据,设置yaxis_index为1
line.add_yaxis(
series_name="扣分占比",
y_axis=percentlist,
yaxis_index=1
)
设置图表层级
参数z_level从0开始,数值越大的图表,会在越上层显示。
# 使用add_yaxis函数,设置图例名称参数series_name为"扣分占比",传入percentlist作为y轴数据,设置yaxis_index为1,设置z_level为1
line.add_yaxis(
series_name="扣分占比",
y_axis=percentlist,
yaxis_index=1,
z_level=1
)
总结
# 定义知识点和平均扣分的字典
knowledge = {"圆锥曲线":7.5,"直线与圆":5.0,"立体几何":10.1,"空间向量":3.2,"数列":14.5,"解三角":1.9,"导数":28.5,"函数模型":3.3,"二项式定理":3.0,"线性规划":4.0,"平面向量":3.5,"复数":1.3,"集合":1.9}
# 根据字典value的大小,对knowledge的元素进行降序排序,然后结果赋值给result
result = sorted(knowledge.items(),key = lambda item:item[1],reverse=True)
# 定义一个pointList和scoreList的空列表
pointList = []
scoreList = []
# for循环遍历列表result
for item in result:
# 其中元组中第一个元素就是x轴的数据,添加到列表pointList中
pointList.append(item[0])
# 其中元组的第二个元素就是y轴的数据,添加到列表scoreList中
scoreList.append(item[1])
# 定义一个累计频率的空列表percentlist
percentlist = []
# 定义一个计算累计频率的变量accu_percent,赋值为0
accu_percent = 0
# 遍历列表scoreList中的每个元素
for score in scoreList:
# 计算单个扣分分数,占所有扣分分数的比例,乘100,赋值给percent
percent = score/sum(scoreList)*100
# 累计频率accu_percent,加上当前扣分分数的频率,得到当前的累计频率accu_percent
accu_percent = accu_percent + percent
# 使用round()函数保留两位小数,append到列表percentlist中
percentlist.append(round(accu_percent,2))
# 绘制柱状图
# 从pyecharts.charts中 导入 Bar模块
from pyecharts.charts import Bar
# 创建一个柱状图Bar对象并赋值给变量bar
bar = Bar()
# 使用add_xaxis函数,传入pointList作为x轴数据
bar.add_xaxis(xaxis_data=pointList)
# 使用add_yaxis函数,设置图例名称参数series_name为"扣分",传入scoreList作为y轴数据
bar.add_yaxis(
series_name="扣分",
y_axis=scoreList
)
# 从pyecharts中导入options模块,简写为opts
from pyecharts import options as opts
# 使用全局配置项,设置x轴旋转45度,设置标题为"数学模块最薄弱的失分点"
bar.set_global_opts(
xaxis_opts=opts.AxisOpts(axislabel_opts={"rotate":45}),
title_opts=opts.TitleOpts(title="数学模块最薄弱的失分点")
)
# 使用extend_axis函数,参数yaxis传入坐标轴配置项opts.AxisOpts()
bar.extend_axis(yaxis=opts.AxisOpts())
# 绘制折线图
# 从pyecharts.charts中导入Line模块
from pyecharts.charts import Line
# 创建一个折线图Line对象并赋值给变量line
line = Line()
# 使用add_xaxis函数,传入pointList作为x轴数据
line.add_xaxis(xaxis_data=pointList)
# 使用add_yaxis函数,设置图例名称参数series_name为"扣分占比",传入percentlist作为y轴数据,设置yaxis_index为1,设置z_level为1
line.add_yaxis(
series_name="扣分占比",
y_axis=percentlist,
yaxis_index=1,
z_level=1
)
# 对bar使用overlap()函数,传入line,就是在柱状图的基础上叠加折线图
bar.overlap(line)
# 绘制出图表
bar.render("/Users/Desktop/pareto_overlap.html")
注:overlap()还可以组合不同的图表形式,例如:柱状图叠加饼图
直接组合可能会使图标重合到一起,这时可以通过设置参数center来调整图位置。
#center = [0,0]表示设置饼图的中心坐标为(0,0)。
#设置坐标位置时,也可将参数设置成百分比。设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度
pie.add(
series_name="",
data_pair=data,
radius=["40%","50%"],
center =[0, 0]
#center =["75%", "30%"]
)
overlap()可以组合直角坐标系的图表,如图所示。