数据可视化—动态GDP柱状图绘制
2026/7/24 21:26:48 网站建设 项目流程

动态GDP柱状图绘制

列表的sort方法:对列表元素基于函数进行自定义排序

使用方式:

  • 列表.sort(key=选择排序依据的函数, reverse=True|False)

参数key:要求传入一个函数,表示将列表的每一个元素都传入函数中,返回排序的依据

匿名lambda函数形式

# 准备列表my_list=[["a",33],["b",45],["c",78]]# 排序1,基于带名函数defchoose_sort_key(element):returnelement[1]# element[1]是数字my_list.sort(key=choose_sort_key,reverse=True)# 基于key后的这个函数排序,从大到小# 排序2,基于lambda匿名函数my_list.sort(key=lambdaelement:element[1],reverse=True)print(my_list)

动态GDP柱状图绘制案例演示


frompyecharts.chartsimportBar,Timelinefrompyecharts.optionsimport*frompyecharts.globalsimportThemeType# 读取数据f=open("E:/1960-2019全球GDP数据.csv","r",encoding="GB2312")data_lines=f.readlines()# 关闭文件f.close()# 删除第一条数据data_lines.pop(0)# 将数据转换为字典存储,格式为:# {年份:[[国家,gdp],[国家,gdp],[国家,gdp],.......],年份:[[国家,gdp],[国家,gdp],[国家,gdp],.......],.....}# {1960:[[中国,200],[美国,100],[英国,88],.......],1961:[[中国,300],[美国,200],[英国,168],.......],.....}# 先定义一个字典对象data_dict={}forlineindata_lines:year=int(line.split(",")[0])# 年份country=line.split(",")[1]# 国家gdp=float(line.split(",")[2])# gdp数值,float将科学计数法显示的数转为数字# 如何判断字典里面有没有指定的key值呢?try:data_dict[year].append([country,gdp])exceptKeyError:data_dict[year]=[]data_dict[year].append([country,gdp])# print(data_dict)# 创建时间线对象timeline=Timeline({"theme":ThemeType.LIGHT})# 排序年份sorted_year_list=sorted(data_dict.keys())# 只要前8,所以对列表进行排序foryearinsorted_year_list:# 通过这个lambda element: element[1]对列表中的指定数据进行排序data_dict[year].sort(key=lambdaelement:element[1],reverse=True)year_data=data_dict[year][0:8]x_data=[]y_data=[]forcountry_gdpinyear_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}年全球前8名GDP数据"))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()

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询