夜色难免黑凉,前行必有曙光。
—— 24.3.25
目录:
01.基础柱状图
02.基础时间线柱状图
03.GDP动态柱状图绘制
一、基础柱状图构建
掌握构建一个基础的柱状图并能够反转x和y轴
1.通过Bar功能构建基础柱状图
''' 基础柱状图的开发 '''# 导包 Bar包,生成柱状图对象 from pyecharts.charts import Bar# 构建基础柱状图对象 bar = Bar()# 添加x轴数据 bar.add_xaxis(["中国","美国","英国"])# 添加y轴数据,将y轴数据变为右侧 bar.add_yaxis("GDP",[30,20,10],label_opts = LabelOpts(position = "right" ))# 绘图 bar.render("基础柱状图.html")# 设置数值标签在右侧 ''' bar.add_yaxis("GDP",[30,20,10],lable_opts = LabelOpts(position = "right" )) '''
2.反转x和y轴
''' 基础柱状图的开发 '''# 导包 # 使用Bar功能构建基础柱状图 from pyecharts.charts import Bar # 反转x和y轴 from pyecharts.options import LabelOpts# 构建基础柱状图对象 bar = Bar()# 添加x轴数据 bar.add_xaxis(["中国","美国","英国"])# 添加y轴数据,将y轴数据变为右侧,label_opts数值放在右侧 bar.add_yaxis("GDP",[30,20,10],label_opts = LabelOpts(position = "right" ))# 反转x轴和y轴,调用reversal_axis方法 bar.reversal_axis()# 绘图 bar.render("基础柱状图.html")# 设置数值标签在右侧 ''' bar.add_yaxis("GDP",[30,20,10],lable_opts = LabelOpts(position = "right" )) '''
3.总结
二、基础时间线柱状图
01.掌握基础的时间线配置动态图表
02.掌握设置主题更改颜色样式
1.创建时间线
Timeline() — 时间线
柱状图描述的是分类数据,回答的是每一个分类中[有多少?]这个问题,这是柱状图的主要特点,同时柱状图很难动态的描述一个趋势性的数据,这里pyecharts为我们提供了一种解决方案——时间线
如果说一个Bar、Line对象是一张图表的话,时间线就是创建一个一维的x轴,轴上每一个点就是一个图标对象
基础时间线柱状图
# 演示带有时间线的柱状图开发# 导包 Bar功能构建柱形图 from pyecharts.charts import Bar,Timeline# labelOpts包,label_opts数据放在右侧 from pyecharts.options import LabelOpts bar1 = Bar() bar1.add_xaxis(["中国","美国","英国"]) bar1.add_yaxis("GDP",[30,30,20],label_opts=LabelOpts(position="right")) # 反转x,y轴 bar1.reversal_axis()bar2 = Bar() bar2.add_xaxis(["中国","美国","英国"]) bar2.add_yaxis("GDP",[50,50,50],label_opts=LabelOpts(position="right")) # 反转x,y轴 bar2.reversal_axis()bar3 = Bar() bar3.add_xaxis(["中国","美国","英国"]) bar3.add_yaxis("GDP",[70,60,60],label_opts=LabelOpts(position="right")) # 反转x,y轴 bar3.reversal_axis()# 构建时间线对象 timeline = Timeline()# 在时间线内添加柱状图对象 timeline.add(bar1,"点1") timeline.add(bar2,"点2") timeline.add(bar3,"点3")# 绘图 # 绘图使用时间线对象绘图,而不是bar对象 timeline.render("基础时间线柱状图.html")
2.设置自动播放
# 自动播放设置 timeline.add_schema(play_interval=1000, # 自动播放的时间间隔,单位毫秒is_timeline_show=True, # 是否在自动播放的时候,显示时间线is_auto_play=True, # 是否自动播放is_loop_play=True # 是否循环自动播放 )
3.时间线设置主题
# 构建时间线对象 # 主题设置 将颜色进行设置 timeline = Timeline({"theme":ThemeType.LIGHT} )
随时间自动变化时间柱状图
# 演示带有时间线的柱状图开发# 导包 Bar功能构建柱形图 from pyecharts.charts import Bar,Timeline # 导入labelOpts包,将数据放在右边 from pyecharts.options import LabelOpts # 时间线设置主题包 from pyecharts.globals import ThemeTypebar1 = Bar() bar1.add_xaxis(["中国","美国","英国"]) bar1.add_yaxis("GDP",[30,30,20],label_opts=LabelOpts(position="right")) # 反转x,y轴 bar1.reversal_axis()bar2 = Bar() bar2.add_xaxis(["中国","美国","英国"]) bar2.add_yaxis("GDP",[50,50,50],label_opts=LabelOpts(position="right")) # 反转x,y轴 bar2.reversal_axis()bar3 = Bar() bar3.add_xaxis(["中国","美国","英国"]) bar3.add_yaxis("GDP",[70,60,60],label_opts=LabelOpts(position="right")) # 反转x,y轴 bar3.reversal_axis()# 构建时间线对象 # 主题设置 将颜色进行设置 timeline = Timeline({"theme":ThemeType.LIGHT} )# 在时间线内添加柱状图对象 timeline.add(bar1,"点1") timeline.add(bar2,"点2") timeline.add(bar3,"点3")# 自动播放设置 timeline.add_schema(play_interval=1000, # 自动播放的时间间隔,单位毫秒is_timeline_show=True, # 是否在自动播放的时候,显示时间线is_auto_play=True, # 是否自动播放is_loop_play=True # 是否循环自动播放 )# 绘图 # 绘图使用时间线对象绘图,而不是bar对象 timeline.render("基础时间线柱状图.html")
4.总结
1.什么是时间线?
from pyecharts.charts import Timeline timeline = Timeline()
2.自动播放
# 自动播放设置 timeline.add_schema(play_interval=1000, # 自动播放的时间间隔,单位毫秒is_timeline_show=True, # 是否在自动播放的时候,显示时间线is_auto_play=True, # 是否自动播放is_loop_play=True # 是否循环自动播放 )
3.如何设置主题
# 构建时间线对象 # 主题设置 将颜色进行设置 timeline = Timeline({"theme":ThemeType.LIGHT} )
三、GDP动态柱状图绘制
01.掌握列表的sort方法并配合lambda匿名函数完成列表排序
02.完成图表所需的数据处理
03.完成GDP动态图表绘制
1.列表的sort方法
sorted函数,可以对数据容器进行排序
我们需要对列表进行排序,并指定排序规则,sorted函数就无法完成了
我们补充学习列表的sort方法
使用方式:
列表.sort(key=选择排序依据的函数,reverse=True|False)
参数key,是要求传入一个函数,表示将列表的每一个元素都传入函数中,返回排序的依据
参数reverse,是否反转排序结果,True表示降序,False表示升序
排序,基于带名函数
# 准备列表 my_list = [["a",33],["b",55],["c",11]]# 排序,基于带名函数 def choose_sort_key(element):return element[1]# reverse默认反转,True是反转 my_list.sort(key=choose_sort_key,reverse=True) print(my_list)
排序,基于lamba匿名函数
# 排序,基于lamba匿名函数 my_list.sort(key=lambda element:element[1],reverse=True)print(my_list)
2.需求分析
简单分析后,发现最终效果图中需要:
1.GDP数据处理为亿级
2.有时间轴,按照年份为时间轴的点
3.x轴和y轴反转,同时每一年的数据只要前8名国家
4.有标题,标题的年份会动态更改
5.设置了主题为LIGHT
3.列表的sort方法
带名函数形式
''' 学习列表的sort方法来对列表进行自定义排序 '''# 准备列表 my_list = [["a",33],["b",55],["c",11]]# 排序,基于带名函数 def choose_sort_key(element):return element[1]# reverse默认反转,True是反转 my_list.sort(key=choose_sort_key,reverse=True) print(my_list)
排序,基于lamba匿名函数
''' 学习列表的sort方法来对列表进行自定义排序 '''# 准备列表 my_list = [["a",33],["b",55],["c",11]]# 排序,基于lamba匿名函数 my_list.sort(key=lambda element:element[1],reverse=True)print(my_list)
4.处理数据
将数据转换为字典存储,格式为:
{年份:[[国家,gdp],[国家,gdp],……],年份:[[国家,gdp],[国家,gdp],……},……}
""" 演示第三个图表:GDP动态柱状图开发 """ from pyecharts.charts import Bar, Timeline from pyecharts.options import * from pyecharts.globals import ThemeType# 读取数据 f = open("E:”/python.learning/动态柱状图数据/1960-2019全球GDP数据.csv","r",encoding="GB2312") data_lines = f.readlines() # 关闭文件 f.close() # 删除第一条数据 data_lines.pop(0) # 将数据转换为字典存储,格式为: # { 年份: [ [国家, gdp], [国家,gdp], ...... ], 年份: [ [国家, gdp], [国家,gdp], ...... ], ...... } # { 1960: [ [美国, 123], [中国,321], ...... ], 1961: [ [美国, 123], [中国,321], ...... ], ...... } # 先定义一个字典对象 data_dict = {} for line in data_lines:year = int(line.split(",")[0]) # 年份country = line.split(",")[1] # 国家gdp = float(line.split(",")[2]) # gdp数据# 如何判断字典里面有没有指定的key呢?try:data_dict[year].append([country, gdp])except KeyError:data_dict[year] = []data_dict[year].append([country, gdp])# print(data_dict[1960]) # 创建时间线对象 timeline = Timeline({"theme": ThemeType.LIGHT}) # 排序年份 sorted_year_list = sorted(data_dict.keys()) for year in sorted_year_list:data_dict[year].sort(key=lambda element: element[1], reverse=True)# 取出本年份前8名的国家year_data = data_dict[year][0:8]x_data = []y_data = []for country_gdp in year_data:x_data.append(country_gdp[0]) # x轴添加国家y_data.append(country_gdp[1] / 100000000) # y轴添加gdp数据# 构建柱状图bar = Bar()x_data.reverse()y_data.reverse()bar.add_xaxis(x_data)bar.add_yaxis("GDP(亿)", y_data, label_opts=LabelOpts(position="right"))# 反转x轴和y轴bar.reversal_axis()# 设置每一年的图表的标题bar.set_global_opts(title_opts=TitleOpts(title=f"{year}年全球前8GDP数据"))timeline.add(bar, str(year))# for循环每一年的数据,基于每一年的数据,创建每一年的bar对象 # 在for中,将每一年的bar对象添加到时间线中# 设置时间线自动播放 timeline.add_schema(play_interval=1000,is_timeline_show=True,is_auto_play=True,is_loop_play=False ) # 绘图 timeline.render("1960-2019全球GDP前8国家.html")