python 绘制动态柱状图(12)

本文介绍了如何使用Python的Pyecharts库,通过处理1960-2019年的GDP数据,创建动态柱状图,展示全球前十国家的GDP变化。文章详细讲解了数据处理、使用sort方法排序、时间线对象的创建以及设置动画效果的方法。
摘要由CSDN通过智能技术生成

实现效果

通过对数据的处理,调用,绘制1960-2019年全球前十GDP国家的动态柱状图,每隔一秒刷新一年的数据,下方含时间线,图表标题会随着年份变化而变化,可设置循环播放。
在这里插入图片描述

动态柱状图

运用到的函数

在前面我们学习过sorted函数,可以对数据容器进行排序。
在后面的数据处理中,我们需要对列表进行排序,并指定排序规则,sorted函数就无法完成了。我们补充学习列表的sort方法。
使用方式:
列表.sort(key=选择排序依据的函数, reverse=TrueFalse)

  • 参数key,是要求传入一个函数,表示将列表的每一个元素都传入函数中,返回排序的依据
  • 参数reverse,是否反转排序结果,True表示降序,False表示升序

代码部分

(1)导入需要的包,读取数据

from pyecharts.options import LabelOpts,TitleOpts
from pyecharts.charts import Bar,Timeline,ThemeRiver
from pyecharts.globals import ThemeType
# 读取数据open
f = open("D:\1960-2019全球GDP数据.CSV")
data_lines = f.readlines()
# 关闭文件
f.close()

(2)处理数据
数据格式如下:
在这里插入图片描述

因为第一条数据没有用,所以需要先把第一条数据删除掉。再将对应年份的数据取出来,对应不同国家的数据放到一起,存储为{年份:〔[国家,gdp],[国家, gdp],...... ],年份:[[国家,gdp],【国家, gdp],...... ],..这样的字典格式 以方便后续生成图像。代码如下

# 删除第一条数据
data_lines.pop(0)
# 将数据转换为字典存储,格式为:
# {年份:〔[国家,gdp],[国家, gdp],...... ],年份:[[国家,gdp],【国家, gdp],...... ],......
# 定义一个字典对象
data_dict = {}
for line in data_lines:
    year = int(line.split(",")[0])      # 年份
    country = line.split(",")[1]        # 国家
    gdp = float(line.split(",")[2])     # gdp数据

    # 如何判断字典里有没有指定的key
    # 可以用in和 not in方式判断
    try:
        data_dict[year].append([country,gdp])
    except KeyError:
        data_dict[year]=[]
        data_dict[year].append([country, gdp])
# print(data_dict)

(3)创建时间线对象,构建柱状图和图表设置
动态图的本质是基于每一个时间的数据,创建每一年的bar,按照时间线生成多个柱状图,然后每隔一秒换对应表格的数据,依次播放这些图表,从而达到动态的效果,因此,我们需要创建对应的时间线对象,从而控制图表按照时间线依次进行变化。
代码如下:

# for循环每一年的数据,基于每一年的数据,创建每一年的bar对象#在for中,将每一年的bar对象添加到时间线中
for year in sorted_year_list:
    data_dict[year].sort(key=lambda element: element[1],reverse=True)
    # 取出排名前10的国家
    year_data = data_dict[year][0:10]
    x_data = []
    y_data = []
    for country_gdp in year_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}年全球前十GDP数据")
    )
    timeline.add(bar,str(year)) # 在时间线添加点位

(4)时间线设置
创建好对应的时间线图表后,我们可以设置时间线的一些特征,例如自动播放的时间间隔,是否显示时间线轴,是否自动播放和循环播放等,更多特征可以查阅add_schema包含的内容。
代码如下:

# 设置时间线自动播放
timeline.add_schema(
    play_interval=1000,   # 自动播放的时间间隔,单位毫秒
    is_timeline_show=True,    # 是否在播放的时候,显示时间线
    is_auto_play=True,      # 是否自动播放
    is_loop_play=False       # 是否循环播放

)

(5)绘图
处理好数据和时间轴之后,就可以进行动态图的绘制了。

# 绘图
timeline.render("1960-2019全球GDP前十国家.html")

所有代码按顺序放入编辑器运行后,即会生成对应的动态图。需要注意的是最后一步的绘图采用的是生成html方式,运行py文件后会生成一个名为1960-2019全球GDP前十国家.html的html文件,双击该html文件,右上角会显示浏览器图标,任选一个打开即可看到效果。
在这里插入图片描述
在这里插入图片描述
所用到的数据是这个: 提取码:2ex6
祝大家学习愉快!有问题欢迎讨论!

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值