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

1 篇文章 0 订阅
订阅专栏

近非常流行动态条形图,在各个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()/200
    for 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 gif

df = 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()/200
    for 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)

如何使用python的 Pyecharts库 制作 GDP 动态柱状图?
weixin_43263566的博客
06-06 886
如何使用python的 Pyecharts库 制作 GDP 动态柱状图?
可视化GDP动态图表EXCEL也能搞定,如何用Excel做动态图表
计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。
12-31 1652
可视化GDP动态图表EXCEL也能搞定,前些天网上一个让无数中国人为之振奋的数据可视化图表视频,该视频展示了世界GDP排名前10的国家从1968年-2016年的GDP增长变化情况。视频中,条形图随着年份的变化不断增长,各国的排名也在不停的切换,伴着激动人心的音乐,看着中国的排名不断上升,心中的自豪感油然而生,不禁高呼一声:...
使用pyecharts绘制动态GDP柱状图
m0_49832088的博客
02-08 1181
使用pyecharts绘制动态GDP柱状图
matplotlib中的FuncAnimation()实现GDP世界排名动态
读万卷书 行万里路
04-09 1457
很久以前写过一篇使用Matplotlib实现GDP世界排名动态图,具体可以参考:https://blog.csdn.net/yeshang_lady/article/details/106040579。 但当时最终的动态图的实现方法非常笨拙,所以这里用maplotlib中的动态图函数FuncAnimation()重新实现制作一遍。数据集可以在原博文给出的网盘链接中下载。具体代码如下: import pandas as pd import matplotlib as mpl from matplotlib
Tableau实现世界GDP排名动态
读万卷书 行万里路
05-19 4604
用Tableau实现GDP动态排名图对于我这个Tableau小白来说有点太难了,所以就打算从最简单的版本开始实现,慢慢优化。顺便在学习的过程中加深对Tableau的了解。 1.极简版本GDP排名动态
动态条形图_练习数据_CSV格式
10-18
动态条形图_练习数据_CSV格式,文章参考:《最简单方法!!用python生成动态条形图》,欢迎大家下载体验~~
Tableau实现动态条形图
02-14
资源内包含Tableau模板文件,需要的小伙伴可以自行下载;
基于Kotlin的Android动态音频条形图view库设计源码
最新发布
05-27
本设计源码提供了一个基于Kotlin的Android动态音频条形图view库,包含48个文件,其中包括12个xml配置文件,10张png图片,5个kt源文件,4个gradle文件,3个gitignore文件,3个gif动画文件,2个properties配置文件,2...
Barchartrace_test 条形竞赛图 动态可视化条形图
05-15
Barchartrace,条形竞赛图 动态可视化条形图,IE11和360安全浏览器下调试通过!JSON对象中的image得发布成web服务才能正常显示图片,否则一直提示图片路径错误!
Axure设计-动态分组条形图(中继器)
05-22
Axure设计—动态分组条形图(中继器);Axure设计—动态分组条形图(中继器);Axure设计—动态分组条形图(中继器)Axure设计—动态分组条形图(中继器);
html 自绘条形图
03-15
html 自绘条形图,效果还不错,可以自己在基础上改造。
js + html条形图
06-24
js+html 的条形图,调用方法明确参数注明详细
各国GDP变化动态图_matlab源码
03-19
【达摩老生出品,必属精品,亲测校正,质量保证】 资源名:各国GDP变化动态图_matlab源码 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群:新手及有一定经验的开发人员
html5生成柱状图(条形图)效果的实例代码
09-28
下面小编就为大家分享一篇html5生成柱状图(条形图)效果的实例代码。小编觉得挺不错的,现在分享给大家,也给大家一个参考。一起跟随小编过来看看吧
网页,html5,canvas,js 动态绘制柱形图
FREEDOM
05-31 7170
chart demo                     #chartContainer{                 border:solid 1px #999;                              }                                             function   zxt(){
超燃动态可视化条形图源码及效果图_HTML5大数据可视化效果(一)彩虹爆炸图...
weixin_42481553的博客
12-30 1057
前言25年过去了,Brooks博士著名的“没有银弹”的论断依旧没有被打破。HTML5也是一样。但这并不妨碍HTML5是一个越来越有威力的“炸蛋”:发展迅速、势不可挡。随着HTML5技术的普及,用HTML5做可视化呈现的项目越来越多了。HTML5的优势明显:网页上直接运行无需插件、手机平板方便兼容、代码开发和维护相对容易,等等。一大波一大波的做Java、.NET甚至C++桌面的程序老手们都纷纷开始研...
如何使用Excel制作动态图表?你还在用函数完成吗,简单的方法交给你
BanGongGunJu的博客
06-21 1747
Excel相比大家都不陌生,几乎每台电脑上面都有这个工具,这也是初入职场小白必会的一个技巧,如何使用Excel制作动态图表?大多数人们都会直接使用函数完成,其实还有更简单的方法,下面一起来看看吧! 如图,插入数据透视表。方法:在插入中选择数据透视表,选中区域。   报表字段设置如下:   得到数据透视表(如下图),将鼠标选中数据透视表的行标签,选择插入中的切片器,选中部门和区域。   切片器...
动态图表制作之:定义名称法
weixin_33817333的博客
01-25 639
2019独角兽企业重金招聘Python工程师标准>>> ...
Python优雅地制作动态条形图
Python_Ai_Road的博客
05-22 979
公众号“算法美食屋”后台回复关键字:动态图,可添加作者微信获取完整代码和人口数据集。先上图片:再上视频:最后上代码:importnumpyasnp importpandasas...
动态条形图_练习数据_csv格式
06-23
### 回答1: 动态条形图是一种可以实时展示数据变化的可视化图表。在练习数据中,通常会使用CSV格式来存储数据。 CSV格式是一种简单易懂的文本文件格式,它以逗号为分隔符来区分不同的数据。因此,CSV文件中的每一行代表一个记录,每一列则代表一个数据项。 在动态条形图中,通常将CSV文件中的时间列作为X轴,将其它数据列作为Y轴,以此绘制出随时间变化的柱状图。当新数据被添加到CSV文件中时,动态条形图也会实时更新,从而展示出最新的数据变化。 动态条形图在很多场景下都有广泛的应用,例如股票市场、天气预报、疫情数据等等。通过使用动态条形图,我们可以方便地从数据中获得一些有意义的信息,以便更好地作出判断和决策。 ### 回答2: 动态条形图是一种非常生动、易于理解的数据呈现方式,其能够让数据呈现得更具有时效性和互动性,更能够深入人心。在练习时,若使用CSV格式的数据,通常应该保证数据的准确性和完整性,并且还需要具有一定的规律性和可读性。 CSV格式(Comma Separated Values,逗号分隔值)是一种电子表格常用的数据存储格式,数据以文本文件形式存储,行之间以换行符为分隔符,每行由逗号(或其他符号)分隔各字段。这种格式的数据可以在各种操作系统平台上进行交换和处理,且具有简洁、易读、易理解的优点。 对于动态条形图的练习数据,可以将其按照时间段分类,将每个时间段的数据保存在一个CSV文件中,便于进行后续处理和展示。有关数据字段的描述,可以在文件开头添加注释或者单独保存在一个文档中。 在进行动态条形图的数据呈现时,需要根据实际需要,选择适合的软件工具实现。例如,使用可视化工具如Tableau、Google Charts、HighCharts等,可以帮助进行数据可视化呈现,并提供各种多彩的视觉效果和互动功能,不仅可以更好地展示数据,还可以方便地与观众进行交流和讨论。 综上所述,动态条形图_练习数据_csv格式的实现需要注意数据的规范性、准确性和完整性。只有保证数据质量,才能够更好地进行数据可视化的呈现,以达到更好的展示效果和交流效果。 ### 回答3: 动态条形图是一种数据可视化工具,可以直观地展示数据随着时间的变化情况。练习数据可以是任何类型的数据,常见的包括股票价格、销售额、人口数量等。 动态条形图通常使用CSV格式的数据文件,CSV(Comma Separated Values)格式是一种逗号分隔的文本文件格式,以逗号分隔每个数据项。CSV格式的数据文件可以很容易地导入到数据可视化工具中,如Excel、Tableau等,以生成动态条形图。 生成动态条形图需要将时间作为X轴,将数据指标作为Y轴,可以使用不同颜色、样式的条形来表示不同数据指标,通过动态展示条形的高度来展示数据的变化趋势。同时,还可以添加轨迹线、注释等元素来增强数据展示的效果,提升可视化效果的质量。 动态条形图作为一种高效的数据可视化工具,广泛应用于各行业的数据分析、决策以及展示中。对于数据分析师和决策者来说,通过动态条形图可以更加直观地了解数据的变化趋势和规律,从而做出更加准确、有针对性的决策。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 爬虫:python如何获得天气数据 14884
  • 安装mxnet遇到巨多出错爆红时,分布解决你的需求 1402
  • 爬取近十年来的天气数据 1257
  • 动态条形图展示人均GDP,最后以gif格式输出 1097

分类专栏

  • 爬虫 2篇
  • 大数据技术 1篇
  • 数据可视化 1篇

最新评论

  • 爬虫:python如何获得天气数据

    m0_63425347: 想把网址那边代表月份的序号改成变量,但是一改底下那个遍历历史记录的那个find_all就会报错,真的一头雾水表情包哥有办法了务必踹我一脚

  • 爬虫:python如何获得天气数据

    -莫小狼-: 大佬,如果想爬取比如2021到2023年的数据改怎么改呢

  • 爬虫:python如何获得天气数据

    笙牧899: 请问博主没和网站连接上怎么办,没有显示出现<Response[200]>,而且结果为“进程已结束,退出代码为 0”

  • 爬取近十年来的天气数据

    梦回逍遥津: AttributeError: 'NoneType' object has no attribute 'find_all'

  • 爬取近十年来的天气数据

    m0_73522166: 请问'NoneType' object has no attribute 'find_all'报错了怎么修改啊

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 安装mxnet遇到巨多出错爆红时,分布解决你的需求
  • 爬取近十年来的天气数据
  • 爬虫:python如何获得天气数据
2023年1篇
2022年3篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司大浪企业网站制作平湖网站推广双龙企业网站设计石岩网站设计模板坑梓网站搜索优化民治关键词按天计费宝安网站定制西乡seo网站推广盐田企业网站改版松岗网站优化推广吉祥网络营销塘坑网站优化按天收费爱联网站开发南澳模板网站建设民治优秀网站设计盐田优秀网站设计坑梓营销网站东莞百度爱采购福永百度爱采购福田网站优化排名光明网站优化推广大芬阿里店铺托管广州营销网站塘坑网站优化软件荷坳标王双龙设计网站塘坑网站推广方案大浪阿里店铺托管坂田网站优化软件大芬网站推广工具歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化