近非常流行动态条形图,在各个APP都有百万播放量,我参考很多优秀的人文章,最终实现动态条形图的生成;生成的效果如图:

我也是一名某科大大数据专业的在校大学生,也会遇到很多形形色色的问题,所以每一步都做的很踏实,结果很清楚。后续也会出一些很实用的代码以很直观的方式展示出来,有好的方法大家 也可以一起讨论讨论。

1.使用的库

import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import matplotlib.animation as animation
from IPython.display import HTML
import gif

2.初步做一个简单的条形图

1.读取文件

df = pd.read_excel('江苏省2018~2021年人均gdp对比图.xlsx')
df.head(5)

 2.对数据进行分组

current_year = 2018
dff = (df[df['year'].eq(current_year)].sort_values(by='人均GDP', ascending=False).head(13))

以下是2018年江苏省13市的人均GDP数据

3.展示条形图

plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
fig, ax = plt.subplots(figsize=(15, 8))
ax.barh(dff['city'], dff['人均GDP'])
plt

3.动态条形图制作

1.读取excel文件数据,提出城市

df = pd.read_excel('江苏省2018~2021年人均gdp对比图.xlsx')
city_list = list(set(df.city))

2.导入random函数,randomcolor用于生成颜色代码

# randomcolor生成颜色代码原理,
# 【1-9/A-F】15个数字随机组合成6位字符串前面再加上一个“#”号键
import random
def randomcolor():colorlist = ['1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']color =''for i in range(6):color += random.choice(colorlist)return '#'+ color

3.构造一个city_color字典

city_color = {}
for city in city_list:city_color[city] = randomcolor()

4.定义一个画条形图的函数:

def draw_barchart(current_year):dff = df[df['year'].eq(current_year)].sort_values(by='人均GDP',ascending = True)ax.clear()ax.barh(dff['city'],dff['人均GDP'],color = [city_color[x] for x in dff['city']]) #ax.bar是一般的条形图,barh是水平的条形图,h是horizontal的意思dx = dff['人均GDP'].max()/200for i ,(value,name) in enumerate(zip(dff['人均GDP'], dff['city'])):ax.text(value+dx,i ,f'{value:,.0f}',size = 14,ha = 'left',va ='center')ax.text(1,0.4,current_year,transform = ax.transAxes,color ='#777777',size = 16,ha ='right',weight=800) ax.text(0,1.06,'人',transform = ax.transAxes,size=12,color='#777777')#set_major_formatter表示刻度尺格式;ax.xaxis.set_major_formatter(ticker.StrMethodFormatter('{x:,.0f}'))ax.xaxis.set_ticks_position('top')ax.tick_params(axis='x',colors='#777777',labelsize=12)# ax.set_yticks([]) #set_yticks([])表示不显示y轴的取值#margins表示自动缩放余额;ax.margins(0,0.01)# 设置后面的网格ax.grid(which='major',axis='x',linestyle='-')#刻度线和网格线是在图标上方还是下方,True为下方ax.set_axisbelow(True)ax.text(0,1.15,'2018-2021年江苏省13市GDP排名',transform=ax.transAxes,size=24,weight=600,ha='left',va='top')ax.text(1,0,'by 小yang',transform = ax.transAxes,color ='#777777',ha = 'right',bbox = dict(facecolor='white',alpha = 0.8,edgecolor='white'))#取消图表周围的方框显示plt.box(False)#plt.savefig('{}.jpg'.format(current_year))保存图片,用在gif图

5.画出条形图

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] #设置汉字字体
fig, ax = plt.subplots(figsize=(15, 8))#设置画布大小
animator = animation.FuncAnimation(fig, draw_barchart, frames=range(2018, 2022),interval=700) #interval越大速度越慢

6.以HTML的形式展示出来

HTML(animator.to_jshtml())
#如果要保存html,用一下代码'''with open("2018-2021年江苏省13市GDP排名.html", "w") as f:print(animator.to_jshtml(), file=f)'''

以下使用HTML(animator.to_jshtml())跑出来的数据,下面的按钮点击就可以实现动态变化。

7.制作gif图

1.根据网上代码制作

animator.save('test.gif',writer='imagemagick') 

虽然已gif格式出来了,但是图片出现了重叠的现象。对于一张图数据变化简单,这个方法并不能满足我们的需求

 2.利用图片生成gif

通过观察发现如果想实现理想状态,需要对每一张图前再加一张空白的页面。就可以实现目标,会的可以在评论区说一说。我根据第4步画条形图的函数中,将每张图片保存。

plt.savefig('{}.jpg'.format(current_year))保存图片,用在gif图

接下来循环,获取2018~2021年江苏省人均GDP的图片

for i in range(2018,2022):fig, ax = plt.subplots(figsize=(15, 8))draw_barchart(i)

获取图片将他们放在 一个合适的文件夹中,接下来就是图片变成gif

#系统操作库import os# 图片处理库from PIL import Image
# 初始化图片地址文件夹途径image_path = 'image/'# 获取文件列表files = os.listdir(image_path)# 定义第一个文件的全局路径file_first_path = os.path.join(image_path, files[0])# 获取Image对象img = Image.open(file_first_path)# 初始化文件对象数组images = []for image in files[1:]:# 获取当前图片全量路径img_path = os.path.join(image_path, image)# 将当前图片使用Image对象打开、然后加入到images数组images.append(Image.open(img_path))# 保存并生成gif动图img.save('2018-2021年江苏省13市GDP排名.gif', save_all=True, append_images=images, loop=0, duration=700)

这样就可以完美生成gif了 ,恭喜啊

4.总代码(gif的制作)

1.图片的制作                                                                                       有第二部分代码哦

import random
import matplotlib
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import random
import matplotlib.animation as animation
from IPython.core.display import HTML
import gifdf = pd.read_excel('江苏省2018~2021年人均gdp对比图.xlsx')
city_list = list(set(df.city))
def randomcolor():colorlist = ['1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']color =''for i in range(6):color += random.choice(colorlist)return '#'+ color# 构造一个name_color字典
city_color = {}
for city in city_list:city_color[city] = randomcolor()#定义一个画条形图的函数:
def draw_barchart(current_year):dff = df[df['year'].eq(current_year)].sort_values(by='人均GDP',ascending = True)ax.clear()ax.barh(dff['city'],dff['人均GDP'],color = [city_color[x] for x in dff['city']]) #ax.bar是一般的条形图,barh是水平的条形图,h是horizontal的意思dx = dff['人均GDP'].max()/200for i ,(value,name) in enumerate(zip(dff['人均GDP'], dff['city'])):ax.text(value+dx,i ,f'{value:,.0f}',size = 14,ha = 'left',va ='center')ax.text(1,0.4,current_year,transform = ax.transAxes,color ='#777777',size = 16,ha ='right',weight=800) ax.text(0,1.06,'人',transform = ax.transAxes,size=12,color='#777777')#set_major_formatter表示刻度尺格式;ax.xaxis.set_major_formatter(ticker.StrMethodFormatter('{x:,.0f}'))ax.xaxis.set_ticks_position('top')ax.tick_params(axis='x',colors='#777777',labelsize=12)# ax.set_yticks([]) #set_yticks([])表示不显示y轴的取值#margins表示自动缩放余额;ax.margins(0,0.01)# 设置后面的网格ax.grid(which='major',axis='x',linestyle='-')#刻度线和网格线是在图标上方还是下方,True为下方ax.set_axisbelow(True)ax.text(0,1.15,'2018-2021年江苏省13市GDP排名',transform=ax.transAxes,size=24,weight=600,ha='left',va='top')ax.text(1,0,'by 小yang',transform = ax.transAxes,color ='#777777',ha = 'right',bbox = dict(facecolor='white',alpha = 0.8,edgecolor='white'))#取消图表周围的方框显示plt.box(False)plt.savefig('{}.jpg'.format(current_year))
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] #设置汉字字体
fig, ax = plt.subplots(figsize=(15, 8))#设置画布大小
animator = animation.FuncAnimation(fig, draw_barchart, frames=range(2018, 2022),interval=700) #interval越大速度越慢
#保存到jshtml
#HTML(animator.to_jshtml())
#HTML(animator.to_jshtml())
'''with open("2018-2021年江苏省13市GDP排名.html", "w") as f:print(animator.to_jshtml(), file=f)'''
animator.save('test.gif',writer='imagemagick')
# windows需要安装imagemagick软件,并配置到系统路径中for i in range(2018,2022):fig, ax = plt.subplots(figsize=(15, 8))draw_barchart(i)

2.将图片找到位置保存,然后生成gif

#系统操作库import os# 图片处理库from PIL import Image
# 初始化图片地址文件夹途径image_path = 'image/'# 获取文件列表files = os.listdir(image_path)# 定义第一个文件的全局路径file_first_path = os.path.join(image_path, files[0])# 获取Image对象img = Image.open(file_first_path)# 初始化文件对象数组images = []for image in files[1:]:# 获取当前图片全量路径img_path = os.path.join(image_path, image)# 将当前图片使用Image对象打开、然后加入到images数组images.append(Image.open(img_path))# 保存并生成gif动图img.save('2018-2021年江苏省13市GDP排名.gif', save_all=True, append_images=images, loop=0, duration=700)

动态条形图展示人均GDP,最后以gif格式输出相关推荐

  1. Power BI动态条形图展示数据趋势(头条、抖音常见)

    在头条.抖音等短视频平台,经常看见使用条形图展示数据变化趋势的视频,比如展示各国GDP变化,各地楼价变化,各地工资变化等等.其实使用Power BI不用十分钟就能完成制作. 一.本例原始数据 原始数据 ...

  2. 炫酷炸天的动态Python条形图展示英文名受欢迎趋势

    最近拿到一份1880-2021年的美国出生人口数据,想看看每个英语名在各年份所使用人数的变化趋势,最好是能动态展示,经过搜索一番发现实现起来也不是很复杂,最终的效果如下: 数据来源及格式 主要用到的字 ...

  3. 这种动态条形图+折线图怎么做?今天我来教你!

    大家好,我是小五???? 前几天我看了一个不到2分钟的视频,动态展示了我国的GDP增长.而且是动态条形图和折线图叠加一起使用,比较少见!然后我立了一个Flag,说要仿制. 本来当天就找了合适的方法,并 ...

  4. 【Python基础】刷爆网络的动态条形图,3行Python代码就能搞定

    上次出了一个在网站「Flourish」画动态条形图的文章[动态条形图视频教程],需要登录网址很多人可能觉得不方便,现在有大佬出了个Python包,只需几行代码就能搞定动态条形图,非常强大,给大家分享下 ...

  5. 【Python绘图】Python画动态条形图(横向直方图)

      之前逛微博时,看到爱豆排行榜 动态条形图,觉得很好奇,感觉这个动态图用到工作汇报中去会很炫酷,想尝试自己做一下.   搜索了一圈的资料发现是用d3.js做的,而且很麻烦,所以决定先用熟悉的Pyth ...

  6. 刷爆网络的动态条形图,3行Python代码就能搞定

    作者:小伍哥 来源:AI入门学习 上次出了一个在网站「Flourish」画动态条形图的文章[动态条形图视频教程],需要登录网址很多人可能觉得不方便,现在有大佬出了个Python包,只需几行代码就能搞定 ...

  7. 1990-2021年地级市人均GDP

    GDP和人均GDP这两个指标可以很好地反映一个城市的经济发展水平,常用于各项研究中!之前我们介绍过过2014-2020年的栅格(.tif)格式的GDP数据和基于<中国城市统计年鉴>整理的1 ...

  8. (1)1994-2019年俄罗斯家庭调查数据(调查表+数据集)(2)各国地理距离、文化距离、制度距离、人均gdp(至2020年)(3)IFR各国分行业-工业机器人数据(1993-2019年)(4

    (1)1994-2019年俄罗斯家庭调查数据(调查表+数据集) (2)各国地理距离.文化距离.制度距离.人均gdp(至2020年) (3)IFR各国分行业-工业机器人数据(1993-2019年) (4 ...

  9. R语言gganimate包创建可视化gif动图:ggplot2可视化静态条形图(bar plot)、gganimate包创建动态条形图(bar plot)动画、基于transition_time函数

    R语言gganimate包创建可视化gif动图:ggplot2可视化静态条形图(bar plot).gganimate包创建动态条形图(bar plot)动画.基于transition_time函数 ...

最新文章

  1. [YTU]_2354 (H 实现复数类中的加运算符重载【C++运算符重载】)
  2. 手把手教你用Python爬虫煎蛋妹纸海量图片
  3. Windows Phone 7知识锦分享
  4. [BTS]使用BizTalk开发应用系统,就是这么简单!
  5. QTCreator中字符编码问题以及WINDOWS API A/W两种版本的说明
  6. go中break continue的使用:示例
  7. 计算机视觉教程 章毓晋 pdf,计算机视觉教程 教学课件 章毓晋 CCV08.pdf
  8. 【Ray Tracing】光线追踪——概述
  9. MYSQL之数据库高级SQL语句详细操作步骤详情介绍
  10. 从金山到小米,看雷军如何一步步成为“飞猪”
  11. 《人人都在说谎:赤裸裸的数据真相》读书笔记1
  12. Codeforces Gym 101086 M ACPC Headquarters : AASTMT (Stairway to Heaven)
  13. 运维信息系统 (Devops Information System)开发日志
  14. 机械硬盘4k读写速度_极速鲨课堂43:机械硬盘秒变固态靠谱吗?
  15. springboot中文官方文档
  16. 学习amber教程A17:伞形采样,绘制丙氨酸三肽的势能面
  17. 2018-2019-2 《网络对抗技术》Exp7 网络欺诈防范 Week10 20165233
  18. 内置函数 匿名函数 eval exec execute compile sorted map filter等常见函数 repr chr ord...
  19. 39、基于51单片机小车红外循迹、避障、遥控控制系统设计
  20. c语言课程设计 水电费,广东工业大学水电费系统C语言设计(文件操作部分)

热门文章

  1. linux配置文件如何排序,Linux系统中sort排序命令的使用教程
  2. module_init源码分析
  3. adb脚本选择语句_常用adb命令汇总(绝对干货)
  4. 2021年低压电工免费试题及低压电工考试技巧
  5. 被降级or地位凸显,技术研究院不同命运背后的企业技术底色
  6. 左图右文或者上图下文的排列
  7. 读OpenSceneGraph快速入门指导(Paul Martz著王锐钱学雷译)有感
  8. Mac 没法登陆,进入Safe boot模式
  9. 一行代码让英特尔显卡光追性能“改进100 倍”,网友们笑了
  10. 2022年PMP考试的3A好考吗?