对全国2014-2023年各省市的人口,做出动态柱状图/时间线轮播多图,即每隔一定时间间隔,自动的切换2014、2015、....2023各省市的人口(即2014-2023年全国省市人口排名前12的情况)
1、模板
# -*- coding: gbk -*-
from pyecharts import options as opts
from pyecharts.charts import Bar, Timeline
from pyecharts.faker import Fakerx = Faker.choose() # ['可乐','雪碧','橙汁','绿茶','奶茶','百威','青岛']
tl = Timeline() # 创建Timeline对象
for i in range(2015, 2020): # 循环5次,创建了5个Bar柱状图bar = (Bar().add_xaxis(x) # 添加X轴数据['可乐','雪碧','橙汁','绿茶','奶茶','百威','青岛'].add_yaxis("商家A", Faker.values()) # 添加Y轴数据 [值1,值2...].add_yaxis("商家B", Faker.values()) # 添加Y轴数据 [值1,值2...].set_global_opts(title_opts=opts.TitleOpts("某商店{}年营业额".format(i))))tl.add(bar, "{}年".format(i))
tl.render("timeline_bar.html")
2、具体实现
# -*- coding: gbk -*-
from pyecharts import options as opts
from pyecharts.charts import Bar, Timeline
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType"""准备数据"""
# 确定需要创建多少个Bar对象,根据文件提供的年份 2014-2023
with open("分省年度数据 .csv","r",encoding="gbk") as f:data_lines=f.readlines()# 删除 data_lines列表的前3个元素(行)
for _ in range(3):data_lines.pop(0)# 删除 data_lines列表的后2个元素(行)
for _ in range(2):data_lines.pop(-1)years=data_lines.pop(0).replace("\n","").split(",")
# 去掉第一个元素“地区”
years.pop(0)# 遍历data_lines,生成我们需要的数据
# 把数据放到一个字典对象中 data_dict={年份:[[省市名,人口数],[省市名,人口数]...],
# 年份:[[省市名,人口数],[省市名,人口数]...]}
# 具体案例 {2003:[["北京市",1456],["天津市",1011]...],
# 2004:[["北京市",1493],["天津市",1024]...],...}# 创建字典对象
data_dict={}for data_line in data_lines:data_line_list=data_line.replace("\n","").split(",")# 遍历years给各个城市的各个省份的人口数据添加到data_dictindex=0for year in years:index+=1try:data_dict[year].append([data_line_list[0],float(data_line_list[index])])except Exception as e:# 如果出现了异常,说明是第一次添加数据data_dict[year]=[]data_dict[year].append([data_line_list[0],float(data_line_list[index])])"""创建Timeline对象"""
timeline=Timeline({"theme":ThemeType.ESSOS})
years.reverse()"""创建Bar对象,并加入到Timeline对象,还要进行配置"""
for year in years:# 下面我们需要取出每一年按照人口数量排序的前12个省市# 1、先排序 2、切片data_dict[year].sort(key=lambda ele:ele[1],reverse=True)rank_12_city_data=data_dict[year][0:12]# 定义Bar的X轴数据x_data=[]# 定义Bar的Y轴数据y_data=[]for city in rank_12_city_data:x_data.append(city[0])y_data.append(city[1])# 创建Bar对象bar=Bar()# 对x_data数据和y_data数据翻转x_data.reverse()y_data.reverse()bar.add_xaxis(x_data)bar.add_yaxis("人口(万)",y_data)# 转换X轴和Y轴bar.reversal_axis()# 全局配置bar.set_global_opts(title_opts=opts.TitleOpts(title=f"{year}年全国省市人口排名前12的情况"))# 将创建好的bar添加到Timeline对象timeline.add(bar,str(year))# 对时间线进行配置
timeline.add_schema(play_interval=500,is_auto_play=True
)"""生成对应的文件"""
timeline.render("2014-2023年全国省市人口排名前12的情况.html")