数据可视化--比较和趋势

一、pyecharts模块

  1. 安装

pip install pyecharts==1.8.1
  1. 导入并创建一个对象

#从pyecharts.charts中导入Bar模块
from pyecharts.charts import Bar
#创建一个柱状图Bar对象并赋值给变量bar
bar=Bar()

补充知识:浮点数取近似值

round(x,n):对浮点数x进行近似取值,并保留n位小数的函数(n可选,默认保留到整数)。

  1. 添加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)
  1. 保存图表--render()

使用render()函数可以将图表以HTML格式存储在代码所在的文件夹内。

#bar.render("路径")
bar.render("/Users/Yoyo/Desktop/fans_likes.html")

二、全局配置项

  1. 导入

from pyecharts import options as opts
  1. 标题设置

bar.set_global_opts(title_opts=opts.TitleOpts(title="候选博主粉丝与点赞的对比"))

在TitleOpts中添加不同的参数,可以对坐标轴的样式进行相应的配置,例如:

title:设置标题文本

subtitle:副标题文本

pos_left:距离容器的左边距

pos_right:距离容器的右边距

  1. 坐标轴配置项--旋转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%是一个分界线。

  1. 字典排序

# 根据字典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,升序排序

  1. 绘制柱状图

  1. 绘制折线图

  1. 绘制叠加图

两张图表如果要进行叠加,就需要对其中一个图表使用overlap()函数,然后将另一个图表的对象作为参数传入。

# 对bar使用overlap()函数,传入line,就是在柱状图的基础上叠加折线图
bar.overlap(line)

  1. 新增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
    )

  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
    )

  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()可以组合直角坐标系的图表,如图所示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值