更多优秀文章,请关注个人微信公众号: 程序猿小杨
一、列表(list)的排序
列表.sort(key=选择排序依据的函数,reverse=TruelFalse)
1、参数ky,是要求传入一个函数,表示将列表的每一个元素都传入函数中,返回排序的依据;
2、参数reverse,是否反转排序结果,True表示降序,False表示升序。
用途:常用于嵌套列表排序。
参考代码:
#列表的排序sort
my_list=[['中国',100],['美国',60],['俄罗斯',80],['日本',10]]
#对上述嵌套列表进行排序,对外层列表进行排序,排序规则是:内层列表的第二个元素数字
#1、定义函数,用来确定按照谁来排序
# def choose_sort_key(element):
# return element[1]
# #嵌套列表排序后的结果:[['中国', 100], ['俄罗斯', 80], ['美国', 60], ['日本', 10]]
# my_list.sort(key=choose_sort_key,reverse=True)
#2、使用lambda匿名函数
my_list.sort(key=lambda element:element[1],reverse=True)
print(f"嵌套列表排序后的结果:{my_list}")
二、利用数据绘制动态的GDP柱状图
2.1、准备数据并处理
关注上面公众号,回复“地图”即可获取相关数据。
2.2、相关代码
####绘制各国前10名GDP动态柱状图
#1、导入数据并处理
from pyecharts.charts import Bar, Timeline
from pyecharts.globals import ThemeType
from pyecharts.options import LabelOpts, InitOpts, TitleOpts
try:
#打开文件
csv_data=open("D:\\1960-2019全球GDP数据.csv", "r", encoding="GB2312")
#读取每行数据
csv_data=csv_data.readlines()
#去掉第一行数据 year,GDP,rate
csv_data.pop(0)
#处理后的字典数据
#格式如下:{年份:[国家,gdp,[国家,gdp,…],年份:[国家,gdp,[国家,gdp,…],…}
data_dict={}
for csv_line_data in csv_data:
line_list=csv_line_data.split(",")
year=int(line_list[0]) #年份
country=line_list[1] #国家
gdp_data =float(line_list[2]) /100000000 # gdp数据
gdp_data=round(gdp_data,2)
try:
data_dict[year].append([country,gdp_data])
except Exception as e:
data_dict[year]=[]
data_dict[year].append([country, gdp_data])
# print(f"处理后的数据:{data_dict}")
timeline = Timeline(init_opts=InitOpts(theme=ThemeType.WHITE))
#2、绘制柱状图
#对字典data_dict按照年份key先排序
sorted_year_data=sorted(data_dict.keys())
#排序后的年份:[1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972,
# print(f"排序后的年份:{sorted_year_data}")
#对每一年GDP数据进行绘图
for years in sorted_year_data:
#对嵌套列表按照GDP排序
data_dict[years].sort(key=lambda element:element[1],reverse=True)
#获取每年数据 取前10名
year_data=data_dict[years][0:10]
# print(f"排序后的year_data:{year_data}")
x_data = [];
y_data = [];
for data in year_data:
# 组装x轴数据 国家
x_data.append(data[0])
# 组装y轴数据 GDP 单位亿
y_data.append(float(data[1]))
#构建柱状图
bar=Bar()
x_data.reverse()
y_data.reverse()
#取前10名的数据
bar.add_xaxis(x_data)
bar.add_yaxis("GDP(亿)",y_data,label_opts=LabelOpts(position="right"))
#翻转x/y
bar.reversal_axis()
## 柱状图bar全局配置
bar.set_global_opts(
# # 标题配置 title:主标题文本,支持使用 \n 换行 title pos_left:组件离容器左侧的距离 pos_bottom:title 组件离容器下侧的距离
title_opts=TitleOpts(title=f"{years}年全球GDP前10数据")
)
# 3、创建时间轴对象
timeline.add(bar, str(years) + "年")
# 设置自动播放
timeline.add_schema(
play_interval="2000", # 表示播放的速度(跳动的间隔),单位毫秒(ms)。
is_auto_play=True, # 是否自动播放。
is_loop_play=True, # 是否循环播放。
is_timeline_show=True # 是否显示 timeline 组件。如果设置为 false,不会显示,但是功能还存在。
)
# 绘制时间轴图
timeline.render("1960-2019全球GDP前10动态柱状图.html")
except Exception as e:
print(f"打开文件异常e:{e}")
效果图:
更多优秀文章,请扫码关注个人微信公众号或搜索“程序猿小杨”添加。