Are you ready?Yes,I’m。是哪部经典中的台词来着?你可曾记得它?

Are you ready?Yes,I’m。是哪部经典中的台词来着?你可曾记得它?用 Python 制作基本上分为三大部分 主要用到的就是两个库函数 pandas 做数据处理和 matplotlib 绘制表并制作动图

大家好,欢迎来到IT知识分享网。

#用扇贝编程,既高效又有趣


前阵子#海绵宝宝结婚了#上了热搜。

Are you ready?Yes,I'm。是哪部经典中的台词来着?你可曾记得它?

图源网络

很多网友表示:海绵宝宝和珊迪都结婚了,我还在单身!

Are you ready?Yes,I'm。是哪部经典中的台词来着?你可曾记得它?

图源网络

但事实上,这只是和珊迪在演戏,海绵宝宝根本没有结婚!

他们的戏还被蟹老板吐槽,没看过这么烂的戏。

Are you ready?Yes,I'm。是哪部经典中的台词来着?你可曾记得它?

图源网络

海绵宝宝结婚是假的,

而今天7月14日是海绵宝宝生日却是真的。

Are you ready?Yes,I'm。是哪部经典中的台词来着?你可曾记得它?

图源网络

并且!今年海绵宝宝真的已经35岁啦!

同时,距离动画开播已经过去22年了,海绵宝宝的人气还是经久不衰。

Are you ready?Yes,I'm。是哪部经典中的台词来着?你可曾记得它?

图源网络

正好之前看到下面这种排序风格动图很火。

Are you ready?Yes,I'm。是哪部经典中的台词来着?你可曾记得它?

又恰逢海绵宝宝的生日,就让黄帮主用python相关的技术来制作一张海绵宝贝角色人气排行榜的动态条形图吧。

让我们看看海绵宝宝是不是真的最有人气!

Are you ready?Yes,I'm。是哪部经典中的台词来着?你可曾记得它?

图源网络

制作步骤

制作这样排序动图的原理:就是把不同的帧组合在一起拼接成gif;把不同时间的排序图拼接在一起,拼接在一起形成一个随时间快速变化的动画,转化成gif。

Python 制作基本上分为三大部分,主要用到的就是两个库函数 pandas做数据处理和matplotlib绘制表并制作动图。

  • 数据预处理

这一部分细分为:数据读取,随机生成颜色代码,角色与颜色映射关系构造

本次选取的数据为从2011年到2020年海绵宝贝各角色的百度搜索指数。数据已保存为csv文件如下图所示:

Are you ready?Yes,I'm。是哪部经典中的台词来着?你可曾记得它?

首先导入我们本次需要使用的几个库函数

import pandas as pd import matplotlib.pyplot as plt import matplotlib.ticker as ticker import matplotlib.animation as animation

然后解决一下matplotlib的中文显示问题

# 以下代码从全局设置字体为SimHei(黑体),解决显示中文问题【Windows】 # 设置font.sans-serif 或 font.family 均可 plt.rcParams['font.sans-serif'] = ['SimHei'] # plt.rcParams['font.family']=['SimHei'] # 解决中文字体下坐标轴负数的负号显示问题 plt.rcParams['axes.unicode_minus'] = False

利用pandas 做数据处理:

#pandas读取数据,取列名分别为name,year和value的值; df = pd.read_csv('hmbb.csv', usecols=['year', 'name', 'value']) df.head()

再构造一个随机颜色代码生成函数,并用字典和角色绑定,让每个角色的数据在条形图中显示不同颜色:

#导入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 area_list1 = set(df['name']) # color_list用于存放随机生成颜色代码个数 # 因为后面区域个数 要与颜色个数保持一致,这里用了len函数; color_list = [] for i in range(len(area_list1)): str_1 = randomcolor() color_list.append(str_1) str_1 = randomcolor() # area_list转化为列表 list_1 = [i for i in area_list1] #colors表示 角色:颜色 一一对应字典形式; colors =dict(zip(list_1,color_list))
  • 图表绘制

这一部分主要是利用matplotlib 写一个在某一年中角色人气排行的条形图的绘制函数,在代码每一步中有详细注释,想实现的可以参照一下代码:

# 用plt加理图表,figsize表示图标长宽,ax表示标签 fig, ax = plt.subplots(figsize=(15, 8)) # dras_barchart生成current_year这一年各城市人口基本情况; def draw_barchart(current_year): # dff对year==current_year的行,以value从升序方式排序; dff = df[df['year'].eq(current_year)].sort_values(by='value', ascending=True).tail(3) # 所有坐标、标签清除 ax.clear() # 显示颜色、角色名字 ax.barh(dff['name'], dff['value'], color=[colors[x] for x in dff['name']]) dx = dff['value'].max() / 200 # ax.text(x,y,name,font,va,ha) # x,y表示位置; # name表示显示文本; # va,ba分别表示水平位置,垂直放置位置; for i, (value, name) in enumerate(zip(dff['value'], dff['name'])): ax.text(value - dx, i, name, size=14, weight=600, ha='right', va='bottom') ax.text(value + dx, i, f'{value:,.0f}', size=14, ha='left', va='center') # ax.transAxes表示轴坐标系,(1,0.4)表示放置位置 ax.text(1, 0.4, current_year, transform=ax.transAxes, color='#', size=46, ha='right', weight=800) # set_major_formatter表示刻度尺格式; ax.xaxis.set_major_formatter(ticker.StrMethodFormatter('{x:,.0f}')) ax.xaxis.set_ticks_position('top') ax.tick_params(axis='x', colors='#', labelsize=12) ax.set_yticks([]) # margins表示自动缩放余额; ax.margins(0, 0.01) # 设置后面的网格 ax.grid(which='major', axis='x', linestyle='-') # 刻度线和网格线是在图标上方还是下方,True为下方 ax.set_axisbelow(True) ax.text(0, 1.15, '海绵宝贝角色人气排行榜', transform=ax.transAxes, size=24, weight=600, ha='left', va='top') ax.text(1, 0, 'by@shanbay黄帮主', transform=ax.transAxes, color='#', ha='right', bbox=dict(facecolor='white', alpha=0.8, edgecolor='white')) # 取消图表周围的方框显示 plt.box(False)
  • 制作的图表转化为动画

用到的功能是 matplotlib 的 animation 函数,生成一个gif动图

#将原来的静态图拼接成动画 fig, ax = plt.subplots(figsize=(15, 8)) ani = animation.FuncAnimation(fig, draw_barchart, frames=range(2011, 2021)) ani.save('hhhh.gif', writer='pillow', fps=2)

运行结果如下图所示:

Are you ready?Yes,I'm。是哪部经典中的台词来着?你可曾记得它?

总结

从动图可以看出海绵宝宝的人气一直位居第一,所以说真不愧是我们的童年男神。

Are you ready?Yes,I'm。是哪部经典中的台词来着?你可曾记得它?

祝海绵宝宝生日快乐!!

Are you ready?Yes,I'm。是哪部经典中的台词来着?你可曾记得它?


以上就是这周的干货分享,如果想继续看干货,

还想让大佬们输出更多技巧

赶快关[来看我]注并转我们吧。

点击“”,即可第一时间阅读每周干货哦!

Are you ready?Yes,I'm。是哪部经典中的台词来着?你可曾记得它?

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/187471.html

(0)
上一篇 2025-09-04 07:15
下一篇 2025-09-04 07:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信