随着数据以前所未有的速度不断膨胀,数据分析师们往往被要求对数据进行分析并加以理解。一旦发生这种情况,就需要更加有效的方式来传达数据。

然而,传达数据分析的结果往往十分棘手。为了更有效地交流,数据可视化是一种流行且非常有效的技巧。

把世界上所有没有经过处理的数据掌握在我们手里并不能让交流变得容易,反而会变得更加困难--Cole Nussbaumer Knaflic

为了更加方便我们的交流,数据可视化至关重要。动图数据可视化可以以更形象、更直观的形式把数据呈现给他人看。

在本文中,我们将一步步学习如何制作图表数据的动图可视化,学习如何把数据可视化成线条图、条形图和饼状图。

动画是如何生成的?

在典型的方式中,正如你在Python中所期望的那样,存在一个非常易于使用的包,它使我们能够为数据可视化添加额外的维度。

该包是 FuncAnimation 扩展方法,是 Python matplotlib 库中 Animation 类的一部分。我们将讨论如何使用它的多个示例,你可以将此函数看作一个while循环,它将不断在画布上重新绘制我们的图形。

1.如何使用数据库?

数据动图可视化从接入数据库开始:

import matplotlib.animation as anianimator = ani.FuncAnimation(fig, chartfunc, interval = 100)

让我们仔细看看FuncAnimation如何输入:

  1. fig 是我们用来“绘制我们的图形”的图形对象
  2. chartfunc 是一个接受数字输入的函数,它表示时间序列上的时间(随着数字的增加,我们沿着时间线移动)
  3. interval 是帧之间的延迟(毫秒),默认为200。

我们需要做的就是把它们的图形参数化为一个函数,这个函数把时间序列中的点作为输入,这就是动图化的开始!

入门

如果你对数据可视化基础知识不太了解,建议点击下面的链接来仔细学习相关内容:

Python数据可视化的完整版操作指南(建议收藏)

接下来,我们将使用来自新冠肺炎的数据,并使用下面代码给出的最终数据集。

import matplotlib.animation as aniimport matplotlib.pyplot as pltimport numpy as npimport pandas as pdurl = '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)

动态线条图

我们需要做的第一件事是定义图的各项,这些项将保持不变。 也就是说,创建图形对象,x和y标签,设置线条颜色和图形边距。

import numpy as npimport matplotlib.pyplot as pltcolor = ['red', 'green', 'blue', 'orange']fig = plt.figure()plt.xticks(rotation=45, ha="right", rotation_mode="anchor") #rotate the x-axis valuesplt.subplots_adjust(bottom = 0.2, top = 0.9) #ensuring the dates (on the x-axis) fit in the screenplt.ylabel('No of Deaths')plt.xlabel('Dates')

然后,我们必须设置曲线函数,然后设置其动画:

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 anianimator = ani.FuncAnimation(fig, buildmebarchart, interval = 100)plt.show()

动态饼状图

代码结构看起来与线图的结构相同。但是,这里面还是会有一些区别。

import numpy as npimport 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' + str(df1.index[min( i, len(df1.index)-1 )].strftime('%y-%m-%d')), fontsize=12)import matplotlib.animation as anianimator = ani.FuncAnimation(fig, getmepie, interval = 200)plt.show()

主要区别之一是,在上面的代码中,我们每次返回的是一组值。在动图线状图中,我们将整个时间序列返回到我们所处的点。我们通过使用以下代码实现:

df1.head(i).max()

head(i)返回一个时间序列,但是 .max()确保我们只得到最新的记录(因为死亡总数要么保持不变,要么上升)。

动态条形图

动图条形图的创建与前面的两个例子一样。在这个例子中,我创建了一个水平条形图和一个垂直条形图。根据你要查看的对象,只需定义变量栏即可。

fig = plt.figure()bar = ''def buildmebarchart(i=int):    iv = min(i, len(df1.index)-1) #the loop iterates an extra one time, which causes the dataframes to go out of bounds. This was the easiest (most lazy) way to solve this :)    objects = df1.max().index    y_pos = np.arange(len(objects))    performance = df1.iloc[[iv]].values.tolist()[0]    if bar == 'vertical':        plt.bar(y_pos, performance, align='center', color=['red', 'green', 'blue', 'orange'])        plt.xticks(y_pos, objects)        plt.ylabel('Deaths')        plt.xlabel('Countries')        plt.title('Deaths per Country ' + str(df1.index[iv].strftime('%y-%m-%d')))    else:        plt.barh(y_pos, performance, align='center', color=['red', 'green', 'blue', 'orange'])        plt.yticks(y_pos, objects)        plt.xlabel('Deaths')        plt.ylabel('Countries')animator = ani.FuncAnimation(fig, buildmebarchart, interval=100)plt.show()

如何保存动画图形?

因为我们已经创建了动态数据图形,并希望把图片保存下来,我们该怎么做?

只需要一行代码即可:

animator.save(r'C:empmyfirstAnimation.gif')

以上为本次如何利用Python来实现动图数据可视化的基础教程,动手才能成长,快拿去练手吧~记得关注、转发+收藏。

--END--

欢迎大家关注我们的公众号:为AI呐喊(weainahan)

linux中python如何调用matlab的数据_如何在Python中创建Gif动图?(动图数据可视化基础教学)相关推荐

  1. python一行输出多个数据_如何在Python中让两个print()函数的输出打印在一行内?

    1.两个连续的print()函数为什么在输出时内容会分行显示? 解:print()中有两个默认参数sep和end,其中sep是代替分隔符,end是代替末尾的换行符,默认使用','代替空格,且默认末尾加 ...

  2. python set 排序_python set 排序_如何在Python中使用sorted()和sort()

    点击"蓝字"关注我们 ?"Python基础知识" 大卫·丰达科夫斯基  著 18财税3班 李潇潇    译 日期:2019年5月6日 一. 使用sorted() ...

  3. simulink显示多个数据_如何在 Simulink 中使用 PID Tuner 进行 PID 调参?

    作者 | 安布奇责编 | 胡雪蕊出品 | CSDN(ID: CSDNnews)本文为一篇技术干货,主要讲述在Simulink如何使用PID Tuner进行PID调参. PID调参器( PIDTuner ...

  4. python调用adb shell命令_如何在python脚本里面连续执行adb shell后面的各种命令

    如何在python脚本里面连续执行adb shell后面的各种命令 adb shell "cd /data/local && mkdir tmp" adb shel ...

  5. python如何定义一个空变量_如何在python中定义自由变量? - python

    python doc中的本地/全局/自由变量定义: 如果名称绑定在块中,则除非声明为非本地,否则它是该块的局部变量.如果在模块级别绑定了名称,则该名称为全局变量. (模块代码块的变量是局部变量和全局变 ...

  6. matlab绘制线性回归_如何在Excel中绘制线性校准曲线

    matlab绘制线性回归 Excel has built-in features that you can use to display your calibration data and calcu ...

  7. python中用什么函数读取字符串_如何在Python中获得函数名作为字符串?

    在Python中,如何在不调用函数的情况下以字符串的形式获得函数名? 1 2 3 4def my_function(): pass print get_function_name_as_string( ...

  8. python打印多个变量名_如何在Python中打印单个和多个变量?

    请考虑下面Python 2.x中的两个Python代码片段.# Code 1 print 1 # Output: 1# Code 2 print(1) # Output: 1 在Python 2.X中 ...

  9. mysql一个表几亿数据_如何在mysql 造1亿条记录的大容量数据表?

    背景及目标:现有数据1000w单表,为压力测试准备1亿条数据. 步骤: 1.将1000w条记录,除id外都导入到多个文件中: //DELIMITER DROP PROCEDURE if EXISTS ...

  10. linux中python如何调用matlab的数据_?如何在Python中加入多个数据帧?

    全文共2235字,预计学习时长7分钟 来源:Pexels 初学Python编程的人,面临的是各种未知的挑战. 下面是一个几乎让所有更有抱负的数据科学家都感到意外的场景: 你正在处理一个从多个源收集数据 ...

最新文章

  1. Android开发权威指南(第2版)新书发布
  2. 在 ASP.NET 网页中不经过回发而实现客户端回调
  3. 2020 阿里云原生实战峰会即将开幕 云原生落地的正确姿势
  4. android 获取apk中的素材图片
  5. 支持断线重连、永久watcher、递归操作并且能跨平台(.NET Core)的ZooKeeper异步客户端
  6. 数据产品经理为什么吃香?
  7. Composer的Autoload源码实现2——注册与运行
  8. mysql union all 等效_Mysql联合查询UNION和UNION ALL的使用介绍
  9. android+nfc+助手,NFC助手app
  10. word使文字垂直居中
  11. 使用Java模拟浏览器登陆网站(以抓取武汉理工大学教务处学生个人课表网页为例)
  12. [BJWC2008]王之财宝
  13. 中学校长在开学典礼上的讲话
  14. 关机时候计算机更新,电脑关机时提示更新,能否强制关机?
  15. Excel数据分析常用函数④——日期函数(now,today,datedif,weekday,weeknum,text)
  16. osgEarth示例分析——osgearth_features
  17. 2019-CCPC-秦皇岛站-I题-Problem I. Invoker(DP)
  18. Python时间差计算
  19. 分享几个好看的Bootstrap后台管理响应式模板
  20. Unfortunately XXX has stopped. 系统应用安装后导致其他应用

热门文章

  1. 【opencv学习笔记】SetImageROI函数设置ROI区域的作用及用法
  2. 入门命令13-字符串查找增强:findstr
  3. 有朋自远方来——阿里软件专家作客武汉博文
  4. leetcode刷题日记-供暖器
  5. 【LeetCode】【数组】题号:*598,范围求和
  6. 从零基础入门Tensorflow2.0 ----二、5.1 超参数搜索
  7. 从零基础入门Tensorflow2.0 ----一、3.3 实战深度神经网络(激活函数)
  8. matlab实现图像的左右翻转
  9. ArcGIS 观景点视域分析
  10. 简单的五子棋游戏(C语言)