2024年字节跳动、阿里等大厂Python面试题,用 Python 制作“会跳舞”的动态图表(1),程序员面试逻辑题

收集整理了一份《2024年最新Python全套学习资料》免费送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来

如果你需要这些资料,可以添加V无偿获取:hxbc188 (备注666)
img

正文

import matplotlib.animation as ani

animator = ani.FuncAnimation(fig, chartfunc, interval = 100)

从中我们可以看到 FuncAnimation 的几个输入:

  • fig 是用来 「绘制图表」的 figure 对象;

  • chartfunc 是一个以数字为输入的函数,其含义为时间序列上的时间;

  • interval 这个更好理解,是帧之间的间隔延迟,以毫秒为单位,默认值为 200。

这是三个关键输入,当然还有更多可选输入,感兴趣的读者可查看原文档,这里不再赘述。

下一步要做的就是将数据图表参数化,从而转换为一个函数,然后将该函数时间序列中的点作为输入,设置完成后就可以正式开始了。

在开始之前依旧需要确认你是否对基本的数据可视化有所了解。也就是说,我们先要将数据进行可视化处理,再进行动态处理。

按照以下代码进行基本调用。另外,这里将采用大型流行病的传播数据作为案例数据(包括每天的死亡人数)。

import matplotlib.animation as ani

import matplotlib.pyplot as plt

import numpy as np

import pandas as pd

url = ‘https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv’

df = pd.read_csv(url, delimiter=‘,’, header=‘infer’)

df_interest = df.loc[

df[‘Country/Region’].isin([‘United Kingdom’, ‘US’, ‘Italy’, ‘Germany’])

& df[‘Province/State’].isna()]

df_interest.rename(

index=lambda x: df_interest.at[x, ‘Country/Region’], inplace=True)

df1 = df_interest.transpose()

df1 = df1.drop([‘Province/State’, ‘Country/Region’, ‘Lat’, ‘Long’])

df1 = df1.loc[(df1 != 0).any(1)]

df1.index = pd.to_datetime(df1.index)

绘制三种常见动态图表

绘制动态线型图

在这里插入图片描述

如下所示,首先需要做的第一件事是定义图的各项,这些基础项设定之后就会保持不变。它们包括:创建 figure 对象,x 标和 y 标,设置线条颜色和 figure 边距等:

import numpy as np

import matplotlib.pyplot as plt

color = [‘red’, ‘green’, ‘blue’, ‘orange’]

fig = plt.figure()

plt.xticks(rotation=45, ha=“right”, rotation_mode=“anchor”) #rotate the x-axis values

plt.subplots_adjust(bottom = 0.2, top = 0.9) #ensuring the dates (on the x-axis) fit in the screen

plt.ylabel(‘No of Deaths’)

plt.xlabel(‘Dates’)

接下来设置 curve 函数,进而使用 .FuncAnimation 让它动起来:

def buildmebarchart(i=int):

plt.legend(df1.columns)

p = plt.plot(df1[:i].index, df1[:i].values) #note it only returns the dataset, up to the point i

for i in range(0,4):

p[i].set_color(color[i]) #set the colour of each curveimport matplotlib.animation as ani

animator = ani.FuncAnimation(fig, buildmebarchart, interval = 100)

plt.show()

动态饼状图

在这里插入图片描述

可以观察到,其代码结构看起来与线型图并无太大差异,但依旧有细小的差别。

import numpy as np

import matplotlib.pyplot as pltfig,ax = plt.subplots()

explode=[0.01,0.01,0.01,0.01] #pop out each slice from the piedef getmepie(i):

def absolute_value(val): #turn % back to a number

a = np.round(val/100.*df1.head(i).max().sum(), 0)

return int(a)

ax.clear()

plot = df1.head(i).max().plot.pie(y=df1.columns,autopct=absolute_value, label=‘’,explode = explode, shadow = True)

plot.set_title(‘Total Number of Deaths\n’ + str(df1.index[min( i, len(df1.index)-1 )].strftime(‘%y-%m-%d’)), fontsize=12)import matplotlib.animation as ani

animator = ani.FuncAnimation(fig, getmepie, interval = 200)

plt.show()

主要区别在于,动态饼状图的代码每次循环都会返回一组数值,但在线型图中返回的是我们所在点之前的整个时间序列。返回时间序列通过 df1.head(i) 来实现,而. max()则保证了我们仅获得最新的数据,因为流行病导致死亡的总数只有两种变化:维持现有数量或持续上升。

最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~

给大家准备的学习资料包括但不限于:

Python 环境、pycharm编辑器/永久激活/翻译插件

python 零基础视频教程

Python 界面开发实战教程

Python 爬虫实战教程

Python 数据分析实战教程

python 游戏开发实战教程

Python 电子书100本

Python 学习路线规划

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

如果你需要这些资料,可以添加V无偿获取:hxbc188 (备注666)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

如果你需要这些资料,可以添加V无偿获取:hxbc188 (备注666)
[外链图片转存中…(img-G5R1OV0W-1713794384008)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值