武汉与其他城市-GDP变化柱形图(python实现)
# -*- coding:utf-8 -*-'''Created on 2019年1月7日@author: Qiuyi'''import matplotlib.pyplot as pltfrom matplotlib import animationimport pandas as pdimport numpy as npimport copyimport osfrom...
·
# -*- coding:utf-8 -*-
'''
Created on 2019年1月7日
@author: Qiuyi
'''
import matplotlib.pyplot as plt
from matplotlib import animation
import pandas as pd
import numpy as np
import copy
import os
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r'C:\Windows\Fonts\simsun.ttc')
homePath = r'D:\LearningFiles'
projectPath = os.path.join(homePath, 'MainCityGDP.csv')
data = pd.read_csv(projectPath, header=3, encoding = 'gbk')
data = data.fillna(0)
class City:
def __init__(self, name):
self.name = name
self.set_color()
def set_color(self, rgba = None):
# RGB and RGBA are sequences of, respectively, 3 or 4 floats in the range 0-1.
if not rgba:
rgba = 'seagreen'
self.color = rgba
def get_frames_cities(data):
frames_cities = []
city_list = []
global year_list
# 获取年份列表,减去地区列即可
year_list = data.columns.tolist()
dc = copy.deepcopy(data)
# 得到不同年份的城市&GDP数据(两列),用于排序
for i in range(len(year_list)-1, 1, -1):
to_sort_data = dc.iloc[0:36, [0, i]]
# 降序排序
year = year_list[i]
to_sort_data.sort_values(by=year, inplace=True)
# 获取每年所有城市的GDP数据
sorted_data = to_sort_data.iloc[:,[1]].values.tolist()
# 获取排序后对应城市列表
sorted_data_city = to_sort_data.iloc[:,[0]].values.tolist()
# 将排序后的城市列表转换成City类
city_set = [City(d) for d in sorted_data_city]
frames_cities.append(sorted_data)
city_list.append(city_set)
return frames_cities, city_list
def draw_chart(frames_cities, city_list):
fig = plt.figure(1, figsize=(12,6))
ax = fig.add_subplot(111)
def animate(i):
ax.cla()
ax.grid()
barhs = []
barhs += ax.barh(range(len(city_list[0])), [d for d in frames_cities[i]], color = [j.color for j in city_list[i]])
plt.yticks(range(16), (j.name for j in city_list[i]), fontproperties=font, fontsize=15)
plt.title(sorted(year_list)[i], fontproperties=font, fontsize=20)
xmin, xmax = ax.get_xlim()
if max([d for d in frames_cities[i]]) >= xmax:
ax.set_xlim(xmin, 2*xmax)
return barhs
anim = animation.FuncAnimation(fig, animate, frames=len(frames_cities), interval=500, repeat=True)
return plt, anim
frames_cities, city_list = get_frames_cities(data)
# 将武汉的柱形条设置为番茄红色
for i in city_list:
for j in i:
if j.name == ['武汉']:
j.set_color('tomato')
# print([j.name for i in city_list for j in i])
# print([j.color for i in city_list for j in i])
# frames_cities是 19x36x1 的三维列表,取 20:36 列只显示 16个城市的排名
frames_cities = np.array(frames_cities).reshape(19,36)[:,20:36].tolist()
city_list = np.array(city_list)[:,20:36].tolist()
plt, anim = draw_chart(frames_cities, city_list)
anim.save('cityGDPVisualizing.gif',writer='imagemagick')
plt.show()
为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。
更多推荐
已为社区贡献1条内容
所有评论(0)