目录
1.问题背景
2.安装模块
3.绘制柱状图的实现
4.对于图表的完善
5.重新思索
1.问题背景
我们想要通过这个用户的获得点赞的数量和她的粉丝数量的比值作为一个指标,我们想要绘制一个柱状图取值管的进行这个排名;
下面的这个是今天最后我们实现的终极效果,看看吧,是不是迫不及待了~~~
2.安装模块
pip install pyecharts==1.8.1
因为这个模块不是我们的内置模块,因此需要我们自己进行导入;
3.绘制柱状图的实现
# 从pyecharts.charts中 导入 Bar模块
from pyecharts.charts import Bar
# 创建一个柱状图Bar对象并赋值给变量bar
bar = Bar()
# 将10位博主的姓名存入变量名为'name'的列表中
name=["一起画笔记","我是课代表","菠萝冰和夏天","Jeannie花","Esther天",
"爱草莓的小挺","栀缘","钢琴上的音乐","Mu123","师008号"]
# 按照博主姓名的顺序,依次将博主的粉丝数量存入变量名为'fans'的列表中
fans=[12.5,23.1,38.5,15.8,14.1,11.4,18.2,16.5,22.6,32]
# 按照博主姓名的顺序,依次将博主的点赞收藏量存入变量名为‘likes’的列表中
likes=[18.2,15.2,222.7,71.5,8.6,70.5,107.7,128.3,109,31.7]
# 计算点赞收藏量与粉丝量的比值
# 1、定义一个空列表ratioList,存储点赞收藏量与粉丝量的比值
ratioList = []
# 2、统计点赞收藏量列表长度,并赋值给length
length = len(likes)
# 3、将点赞收藏量列表中的值除以对应粉丝量列表中的值,
# 并使用round()函数取近似值并保留2位小数,存储到ratioList列表中
for i in range(length):
ratio = round(likes[i]/fans[i],2)
# 使用append函数向这个列表里面添加数据
ratioList.append(ratio)
# 给柱状图添加x轴数据,数据内容是博主姓名列表:name
bar.add_xaxis(xaxis_data=name)
# 给柱状图添加y轴数据,数据内容是赞粉比列表:ratioList
# series_name是这个柱状图的图例的名字,不加上这个参数就会报错
bar.add_yaxis(series_name="赞粉比", y_axis=ratioList)
# TODO 绘制出这条柱状图,并保存到/Users/Yoyo/Desktop/中,文件名称为fans_likes.html
# 使用render函数对于这个柱状图进行保存,保存为png可能会损坏,我们可以保存为html格式
# bar.render(r"E:\zanfenbi.png")
bar.render(r"E:\zanfenbi.html")
绘制效果:
4.对于图表的完善
我们观察就可以直观的发现,这个图表没有标题,而且这个横坐标上面的名字显示的也不是很完全
我们下面通过全局配置项进行完善:
下面的这个代码就是在上面的基础上进行了三处的修改:
# 添加一个模块,用来进行这个全局配置
# 旋转这个x轴的角度
# 添加标题
# 导入options 模块并简写为opts
from pyecharts import options as opts
# 从pyecharts.charts中 导入 Bar模块
from pyecharts.charts import Bar
# 创建一个柱状图Bar对象并赋值给变量bar
bar = Bar()
# 将10位博主的姓名存入变量名为'name'的列表中
name=["一起画笔记","我是课代表","菠萝冰和夏天","Jeannie花",
"Esther天","爱草莓的小挺","栀缘","钢琴上的音乐","Mu123","师008号"]
# 按照博主姓名的顺序,依次将博主的粉丝数量存入变量名为'fans'的列表中
fans=[12.5,23.1,38.5,15.8,14.1,11.4,18.2,16.5,22.6,32]
# 按照博主姓名的顺序,依次将博主的点赞收藏量存入变量名为‘likes’的列表中
likes=[18.2,15.2,222.7,71.5,8.6,70.5,107.7,128.3,109,31.7]
# 计算点赞收藏量与粉丝量的比值
# 1、定义一个空列表ratioList,存储点赞收藏量与粉丝量的比值
ratioList = []
# 2、统计点赞收藏量列表长度,并赋值给length
length = len(likes)
# 3、将点赞收藏量列表中的值除以对应粉丝量列表中的值,并使用round()函数取近似值并保留2位小数,存储到ratioList列表中
for i in range(length):
ratio = round(likes[i]/fans[i],2)
ratioList.append(ratio)
# 给柱状图添加x轴数据,数据内容是博主姓名列表:name
bar.add_xaxis(xaxis_data=name)
# 给柱状图添加y轴数据,数据内容是赞粉比列表:ratioList
bar.add_yaxis(series_name="赞粉比", y_axis=ratioList)
# 使用set_global_opts进行标题配置和x轴配置
# 初始化TitleOpts对象,设置标题名称为"候选博主粉丝与点赞的对比"
# 设置副标题名称为"筛选博主"
# 初始化一个AxisOpts对象,设置标签旋转45度
bar.set_global_opts(title_opts=opts.TitleOpts(title = "候选博主粉丝与点赞的对比",subtitle = "筛选博主"),
xaxis_opts=opts.AxisOpts(axislabel_opts={"rotate":45}))
#上面的这个函数调用实际上是一个优化之后的结果,如果两次调用这个函数,这个第一次调用的时候
# 添加的标题就会消失,因此这个只调用一次,但是这一次调用进行两个配置
# 绘制出这条柱状图,并保存到路径"/Users/Yoyo/Desktop/fans_likes.html"
bar.render(r"E:\quanjupeizhi.html")
进行图表的美化之后的效果:
5.重新思索
我们需要分别绘制出来每一个博主的点赞量的变化,这个我们想要使用一个看板实现切换效果,这个需要用到tab模块;
每一个用户这个绘制图形的最大值不同,我们需要统一,否则很容易直观上判断错误;
我想要说的和这个注释都在下面,自行学习喽:
# 从pyecharts.charts中导入Line和Tab
# 这个里面的tab就是去绘制这个切换的面板的
from pyecharts.charts import Line,Tab
# 从pyecharts中导入options模块并简写为opts
from pyecharts import options as opts
# 创建一个组件Tab对象,赋值给变量tab
tab = Tab()
# 近10篇笔记的点赞量数据存入列表likes中
likes1 =[71,429,150,2214,626,1597,773,10000,1947,2275]
likes2 =[299,720,97,995,1010,12000,862,2588,1015,8522]
likes3 =[113,102,619,3465,531,1426,921,3717,2598,526]
likes4 =[421,392,680,938,2013,493,1624,1204,4955,2021]
likes5 =[151,376,60,3785,277,46,325,3212,143,566]
likes6 =[479,8355,933,3610,4073,606,1824,568,7981,632]
# 将博主姓名存入列表name_list中
name_list = ["菠萝冰和夏天","Jeannie花","爱草莓的小挺","栀缘","钢琴上的音乐","Mu123"]
# 将博主10篇笔记的点赞量数据存入列表likes_list中
likes_list =[likes1,likes2,likes3,likes4,likes5,likes6]
# 将最近10篇笔记的名字存入列表并赋值给变量page
page = ["近10篇","近9篇","近8篇","近7篇","近6篇","近5篇","近4篇","近3篇","近2篇","近1篇"]
# 定义函数create_line(),获取博主名字name和点赞数likes,绘制折线图
def create_line(name,likes):
# 创建折线图Line对象,并赋值给变量line,设置主题为"dark"
# 这个theme就是一个颜色效果,有很多的类型,可以去官方文档了解
line = Line(init_opts=opts.InitOpts(theme="dark"))
# 给折线图添加x轴数据,数据内容是笔记名字:page
line.add_xaxis(page)
# 给折线图添加y轴数据,数据内容是点赞量列表:likes,图例名称为博主姓名:name,折线图样式为:平滑折线图
line.add_yaxis(series_name=name, y_axis=likes,is_smooth=True)
# 用set_global_opts进行y轴配置,初始化一个AxisOpts对象,设置最大值为13000:
# 这个地方的设置是因为如果有的数据量普遍偏小,我们没有办法通过这个高度进行判断
#如果这个最大值是一样的,这个数据量小的就会特别低,我们可以治钢管的看到效果
line.set_global_opts(yaxis_opts= opts.AxisOpts(max_ = 13000))
# 返回折线图
return line
# 定义一个计数器n,初始值为0
n = 0
# 循环name_list列表,依次将博主name提取出来
for name in name_list:
# 将create_line()函数赋值给line,参数为name,和列表likes_list中第n项的值
# 这个就是在绘制看板
line = create_line(name, likes_list[n])
# 使用tab.add()函数将折线图依次添加进看板中
tab.add(line, name)
# 计数器n加1
n = n + 1
# 使用tab.render()展示折线图,并保存到/Users/Yoyo/中,文件名称为line.html
tab.render(r"E:\xia3.html")
最后看一眼效果:上面是可以进行切换的欧~~