python高端实现各国GDP动态轮换图

您所在的位置:网站首页 世界gdp动态排名 python高端实现各国GDP动态轮换图

python高端实现各国GDP动态轮换图

2023-09-30 22:41| 来源: 网络整理| 查看: 265

python高端实现各国GDP动态轮换图

文章目录 python高端实现各国GDP动态轮换图前言效果一、准备数据等文件二、完整代码1.准备showGDP.py2.准备PlotUtil.py 总结效果展示

前言效果

今天我们来试一下用python实现世界各国从1960-2018年的各国的GDP展示效果!也许大家会觉得有用!

在这里插入图片描述

一、准备数据等文件

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

二、完整代码 1.准备showGDP.py

代码如下:

#coding=utf-8 # import pandas as pd import matplotlib.pyplot as plt import matplotlib.animation as animation import PlotUtil import platform import sys def is_country(x, fields): if "v2" in sys.version: x = x.encode("utf-8") for field in fields: if field in x: return False return True def main(): # 读取数据 gdp = pd.read_excel("GDP_MAP.xls") # 筛选:去掉世界、一些地区性的数据 fields = ["世界", "收入国家", "地区", "南亚", "组织成员", "人口","北美", "联盟", "IBRD", "IDA", "重债穷国"] gdp["is_country"] = gdp.apply(lambda x: is_country(x["Country Name"], fields), axis = 1) gdp = gdp[gdp["is_country"] == True] datas = [] for year in range(1960, 2019): year = str(year) gdp.sort_values(year, inplace = True, ascending = False) print(year,"==========================================") print(gdp[0:15][["Country Name", year]]) data = gdp[0:15] data.sort_values(year, inplace = True, ascending = True) data[year] = data[year] / 10 ** 11 datas.append([year, data[year].tolist(), data["Country Name"].tolist()]) plot = PlotUtil.Plot(datas) if "v2" in sys.version: # 如果你是用python2运行 plot.showGif("gdp.gif", writer = "imagemagick") if "v3" in sys.version: # r如果你是用python3运行 plot.showGif("gdp.html", writer = "html") if __name__ == '__main__': main() 2.准备PlotUtil.py

代码如下(示例):

#coding=utf-8 import matplotlib.pyplot as plt from matplotlib import animation # 动图的核心函数 import sys class Plot(object): """docstring for Plot""" def __init__(self, data): # 中文显示 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False fig, ax = plt.subplots(figsize = (12,6)) self.fig = fig self.ax = ax self.data = data def showGif(self, save_path, writer = 'imagemagick'): plt.cla() ani = animation.FuncAnimation(fig = self.fig, func = self.update, frames = len(self.data), init_func = self.init, interval = 0.5, blit = False, repeat = False) # 不用imagemagick时,可以保存为html ani.save(save_path, writer = writer, fps = 3) # def init(self): bar = self.ax.barh([], [], color = '#0CD9F1') return bar def update(self, i): self.ax.cla() data = self.data[i] x = data[1] y = data[2] year = data[0] bars = [] for k in range(len(x)): tmp = y[k] if "v2" in sys.version: tmp = y[k].encode("utf-8") if tmp in ["中国"]: bar = self.ax.barh(k, x[k], color = 'r') else: bar = self.ax.barh(k, x[k], color = '#0CD9F1') bars.append(bar) #添加数据标签 for rect in bars: rect = rect[0] w = rect.get_width() self.ax.text(w, rect.get_y() + rect.get_height() / 2, '%.1f' % float(w), ha = 'left',va = 'center') #设置Y轴刻度线标签 self.ax.set_title(year) self.ax.set_yticks(range(len(y))) self.ax.set_yticklabels(y) if "v2" in sys.version: self.ax.set_xlabel("GDP(百亿)".decode("utf-8")) else: self.ax.set_xlabel("GDP(百亿)") return bar

写的时候,你可以根据自己的喜好,修改代码的效果,以及相应的HEX,都是根据个人哈,如果需要多元化,还可以继续把根据每个国家的不用,利用flag进行颜色变换,效果会更好!这里我就不赘述了!

最后运行,打开html文件,即可达到你要的效果!

总结 效果展示

在这里插入图片描述

这是最后的效果,也希望大家多多支持!谢谢大家! 特别注意的是,请大家在运行的时候,放在同一个路径下。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3