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

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



前言效果

今天我们来试一下用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文件,即可达到你要的效果!


总结

效果展示

在这里插入图片描述

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

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页