夜色难免黑凉,前行必有曙光。
—— 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 ThemeType 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( {"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]] # 定义排序方式,基于带名函数,数字排序,下标1 def choose_sort_key(element): return element[1] # reverse默认反转,True是反转,将元素传入函数中,来确定按照什么排序 my_list.sort(key=choose_sort_key,reverse=True) print(my_list)
排序,基于lamba匿名函数
# 准备列表 my_list = [["a",33],["b",55],["c",11]] # 排序,基于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], [国家,gdp], ...... ], 年份: [ [国家, gdp], [国家,gdp], ...... ], ...... } # { 1960: [ [美国, 123], [中国,321], ...... ], 1961: [ [美国, 123], [中国,321], ...... ], ...... } # 先定义一个字典对象 data_dict = {} # 循环遍历拿到文件中的每一个数据 for line in data_lines: # 字符串的分割,split("字符")方法 year = int(line.split(",")[0]) # 年份 country = line.split(",")[1] # 国家 # 用float强转将科学记数法转变为小数 gdp = float(line.split(",")[2]) # gdp数据 # 如何判断字典里面有没有指定的key呢? 异常的处理方法 try: # 如果没有异常,表面数据中有这个年份数据了,调用append方法追加一份数据 data_dict[year].append([country, gdp]) except KeyError: # 如果出现了异常,表明数据中没有这个year,构建一个空的列表在里面,追加新的内嵌列表,添加数据 data_dict[year] = [] data_dict[year].append([country, gdp]) # print(data_dict[1960]) # 打印文档数据
5.创建时间线对象
# 创建时间线对象 timeline = Timeline({"theme": ThemeType.LIGHT}) # 排序年份 取出全部的key并给它们排序 sorted_year_list = sorted(data_dict.keys()) # for循环每一年的数据,基于每一年的数据,创建每一年的bar对象 # 在for中,将每一年的bar对象添加到时间线中 for year in sorted_year_list: # 使用了lambda匿名函数 key = lambda element:element[1],反转后GDP高的在第一位 data_dict[year].sort(key=lambda element: element[1], reverse=True) # 只需要前八名的年份数据,取出本年份GDP前8名的国家 year_data = data_dict[year][0:8] # 序列的切片 # 只需要简单定义出两个空列表 x_data = [] y_data = [] # 取出年份数据 for country_gdp in year_data: # append方法给列表添加对象 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数据") ) # bar对象是图表,str(year)点(对象)的名字就是当前年份 timeline.add(bar, str(year))
6.设置自动播放
# 设置时间线自动播放 timeline.add_schema( play_interval=1000, # 播放时间间隔 is_timeline_show=True, # 换点进行显示出来 is_auto_play=True, # 是否自动播放 is_loop_play=False # 是否循环播放 )
7.绘图
# 绘图 timeline.render("1960-2019全球GDP前8国家.html")
8.整体代码
""" 演示第三个图表:GDP动态柱状图开发 Bar,构建柱状图 optiond,对标题进行设计 TimeLine,时间线对象 ThemeTypr,导入主题颜色的包 """ from pyecharts.charts import Bar, Timeline from pyecharts.options import * from pyecharts.globals import ThemeType # 读取数据 f = open("E:\python.learning\动态柱状图数据/1960-2019全球GDP数据.txt", "r", encoding="utf-8") 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: # 字符串的分割,split("字符")方法 year = int(line.split(",")[0]) # 年份 country = line.split(",")[1] # 国家 # 用float强转将科学记数法转变为小数 gdp = float(line.split(",")[2]) # gdp数据 # 如何判断字典里面有没有指定的key呢? 异常的处理方法 try: # 如果没有异常,表面数据中有这个年份数据了,调用append方法追加一份数据 data_dict[year].append([country, gdp]) except KeyError: # 如果出现了异常,表明数据中没有这个year,构建一个空的列表在里面,追加新的内嵌列表,添加数据 data_dict[year] = [] data_dict[year].append([country, gdp]) # print(data_dict[1960]) # 打印文档数据 # 创建时间线对象 timeline = Timeline({"theme": ThemeType.LIGHT}) # 排序年份 取出全部的key并给它们排序 sorted_year_list = sorted(data_dict.keys()) # for循环每一年的数据,基于每一年的数据,创建每一年的bar对象 # 在for中,将每一年的bar对象添加到时间线中 for year in sorted_year_list: # 使用了lambda匿名函数 key = lambda element:element[1],反转后GDP高的在第一位 data_dict[year].sort(key=lambda element: element[1], reverse=True) # 只需要前八名的年份数据,取出本年份GDP前8名的国家 year_data = data_dict[year][0:8] # 序列的切片 # 只需要简单定义出两个空列表 x_data = [] y_data = [] # 取出年份数据 for country_gdp in year_data: # append方法给列表添加对象 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数据") ) # bar对象是图表,str(year)点(对象)的名字就是当前年份 timeline.add(bar, str(year)) # 设置时间线自动播放 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")
9.运行结果