对全国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 Faker
x = 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_dict
index=0
for year in years:
index+=1
try:
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")