初识Python中matplotlib绘图

当我们对数据做简单的处理后,可以得到一份相对干净的数据,只有对干净的数据进行可视化,才能体现数据潜在的规律和内涵。我们依据数据的绘图展示进行分析,对公司或者企业做出进一步的战略部署具有重要的意义,在这节课中我们就要来一起学习展示数据信息的方法。

知识结构
在这里插入图片描述

常见可视化图像

有人说图片比文字具有更快速更高效的信息展现能力。
我们来体现一下,首先,大家来阅读一下这个可爱的故事:
在这里插入图片描述

这是小兔运南瓜的故事,然后我们再来看这样一张图:
在这里插入图片描述

图片中是不是可以更加快速地获取信息呢?
研究表明人类大脑处理图片的速度要比文字快6万倍,视觉内容能再短时间内产生更大的影响力。
所以说,将海量的数据转换成可视化的图形成为了我们展示数据信息的必备技能。
将数据转换成图像的过程叫做数据可视化。Python中包含一些数据可视化的工具,我们可以使用他们获得想要的数据图像展示效果。从今天开始,我们就来认识几个常用的可视化工具。
matplotlib是Python中最常用的可视化工具之一,它的功能非常强大,可以通过调用函数轻松方便地绘制数据分析中常见的各种图像,比如折线图、条形图、柱状图、散点图、箱线图等。

我们来看一下matplotlib可以绘制哪些图。

No1.散点图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tbB0A31l-1587521877675)(./3.png)]

在散点图中每个数据是用点来表示的,每个点有两个坐标,x和y,每个x对应一个y,是一组二维信息数据。我们可以通过散点图中散点的疏密程度和变化趋势,清晰地描述两个变量之间的数量关系。

No2.直方图
在这里插入图片描述
在这里插入图片描述

直方图用来描述数据的分布,可以对类别型数据进行绘图,也可以对连续数据绘图

当对类别数据绘图时,一般横轴表示数据的类别,纵轴表示类别的个数,也称为频数;当对连续数据进行绘图时,一般横轴表示区间,通过将连续数据划分为n个区间(组),分别计算落在区间(组)内的频数,这个频数即为纵轴的值。

No3.柱状图
在这里插入图片描述
在这里插入图片描述

柱状图用于描述不同分组不同类别数据的关系,柱子的高低表示数值的大小。与直方图区别的是,柱状图纵轴的含义是数值的大小,而直方图纵轴的含义是每个组中包含的数量个数。

No4.折线图

在这里插入图片描述
折线图用来描述数据的趋势,可以显示随时间变化的连续数据的数值变动,因此非常适用于展示在相等时间间隔下数据的趋势。

No5.箱线图
在这里插入图片描述
箱线图,用于显示一组数据的分散情况。因形状如箱子而得名。它主要反映原始数据分布的特征,里面包含了分位数的概念,将分位数的概念以图形的形式展示。

No6.饼图
在这里插入图片描述
饼图用于展示每一项数据相对于所有项总和数据的比例。图中右上角的方框是图例,图例中每一个颜色代表了一项数据,或者一类数据,饼图常用于描述类别型的数据,以直观形式了解每一项(类)占所有数据的百分比。

当然,除了这些图之外,matplotlib还可以绘制一些其它的图像,那么,这些图究竟是如何绘制的呢?

绘图过程

在Python中,我们常用的绘图工具包括matplotlib和Seaborn,Seaborn是基于matplotlib的高级工具库,Seaborn的功能更丰富些,绘图更加简单、多样化,可以绘制更多炫酷的图像

matplotlib是Python数据可视化的基础库,这一关,我们先通过matplotlib对可视化有个简单的认识,了解下如何通过代码将数据进行绘图。

使用matplotlib之前,我们需要将它导入,有以下两种方式导入常用的函数库,下面以导入matplotlib的pyplot模块为例进行代码演示:

from matplotlib import pyplot as plt
#or
import matplotlib.pyplot as plt

第一种方式from在只导入一个模块的时候,和第二种方式的作用是一样的,但是第一种方式import后面可以接多个模块,使用逗号将多个模块分隔开,当导入多个模块的时候,就不要用as设置别名了。

matplotlib中包含了很多模块,而我们绘图中,比较常用的模块是pyplot,pyplot模块中包含了很多的绘图方法,比如,绘制曲线plot( ),绘制直方图hist( ),绘制饼图pie( )等

在as后的plt就作为函数库的别名,我们编写代码时,直接使用plt调用方法或者属性就可以,具体调用方式,后面会有代码示例,一般调用形式为:库名.方法。

使用matplotlib绘制图像我们往往遵循这样的步骤:

在这里插入图片描述

在对数据进行绘图之前,首先,我们应该对数据有基本的了解,看下数据有哪些列,列的含义是什么,每个列的类型是什么样子的,下面就让我们阅读下数据吧。

我们要来体验的是:查看风靡全球的游戏pokemon go的数据统计可视化结果。
在这里插入图片描述

《精灵宝可梦Go》(Pokemon Go)是由任天堂、Pokemon公司、Niantic公司合作推出的“在现实中捕捉精灵宝可梦”的AR手游(又称《口袋妖怪GO》),熟悉的同学们都知道,游戏的主要目标是在室外捕捉宝可梦然后在道馆使用它们做战斗。当我们不断移动,附近出现宝可梦时,设备便会闪烁和震动来提醒我们扑捉它们。
现在,我们有一组数据集:’pokemon.csv’,数据集中记录了各种宝可梦的信息,比如:

  • Number: Pokédex中的Pokémon ID,整型
  • Name: Pokémon名称,字符串
  • Type_1: 主要类别,字符串
  • Type_2: 副类别,字符串
  • Total: 基本统计值的和,整型。基本统计值包含以下6个属性:
  • HP : 生命值,整型
  • Attack: 攻击值,整型
  • Defense: 防御值,整型
  • Sp_Atk: 特殊攻击值,整型
  • Sp_Def: 特殊防御值,整型
  • Speed: 速度值,整型
  • Generation: 属于第几代Pokémon,整型
  • isLegendary: 是否为传说中的Pokémon,布尔值
  • Color: Pokémon颜色,字符串
  • hasGender: 是否有性别,布尔值
  • Pr_male: 可能为男性的概率,浮点型
  • Egg_Group_1: 蛋群分组1,字符串
  • Egg_Group_2: 蛋群分组2(如果有的话),字符串
  • hasMegaEvolution: 是否拥有Mega进化的能力,布尔值
  • Height_m: Pokémon的高度(单位为m),浮点型
  • Weight_kg: Pokémon的重量(单位为kg),浮点型
  • Catch_Rate: 捕获率,整型
  • Body_Style: 身体形状,字符串

在这些变量中,我们重点探究的是所有宝可梦以下变量数据的分布情况

是否为传说中的Pokémon(isLegendary)、是否有性别(hasGender)、是否拥有Mega进化的能力(hasMegaEvolution)、Pokémon颜色(Color)、身体形状(Body_Style)、属于第几代Pokémon(Generation)

我们将绘制各变量数据量分布图,最终会得到这样的一张图,这个图里的每个子图分别绘制了一个图像,每个图像表示对一个列或者多个列数据进行可视化:
在这里插入图片描述
通过上面的介绍,我们对数据有了初步的介绍,那么,下面,我们按步骤对数据进行可视化,以了解如何通过代码对数据进行绘图。

注意:为了尽快了解使用代码进行绘图的步骤,下面,我们只按照下方的步骤运行老师的代码,重要的事情说三遍,只运行老师的代码,只运行老师的代码,只运行老师的代码,通过运行的结果对绘图有更深刻的理解,但是,在演示步骤的过程中,我们不对代码做解释,关于代码的介绍,我们在后面会进行详细介绍,这里,我们只做初步的了解。

第一步:创建画布

在使用matplotlib绘图的时候首先要做的是创建一个画布,类比于手绘,也就是拿出来一张纸,然后我们将图像绘制在这张纸上。画布在matplotlib中就是一个figure,是一个图形的对象。

from matplotlib import pyplot as plt    
%matplotlib inline    
plt.figure(figsize=(20, 10))    
plt.show()

from matplotlib import pyplot as plt
%matplotlib inline
plt.figure(figsize=(20,10))
plt.show()
<Figure size 1440x720 with 0 Axes>

以上代码的返回结果是一个Figure对象。
表示我们已经创建好了一个figure画板,也就是我们将绘图所用的空白纸铺好了,万事俱备,马上就可以动手绘制了。

第二步:确定绘图区域

在创建好画布之后,接下来我们要做的是思考一下这块画布要如何分区。如果我们只希望绘制一个图像,那么画布就看做一个区域就好。如果想绘制多个图,那么就需要对画布进行分区。
在这里插入图片描述

我们可以在画布上确定一个或者多个绘图区域,每块绘制不同的图,每个不同的图都被称作子图。
每个子图中有自己的坐标轴或者坐标系,我们称坐标轴叫做axis。

from matplotlib import pyplot as plt    
%matplotlib inline  
plt.figure(figsize=(20, 10))  
ax1 = plt.subplot(2, 3, 1)  
plt.subplot(2, 3, 2, sharey=ax1)  
plt.subplot(2, 3, 3, sharey=ax1)  
plt.subplot(2, 3, 4)  
plt.subplot(2, 3, 5)  
plt.subplot(2, 3, 6)  
plt.show()
from matplotlib import pyplot as plt
%matplotlib inline
plt.figure(figsize=(20,10))
ax1=plt.subplot(2,3,1)
plt.subplot(2,3,2,sharey=ax1)
plt.subplot(2,3,3,sharey=ax1)
plt.subplot(2,3,4)
plt.subplot(2,3,5)
plt.subplot(2,3,6)
plt.show()

在这里插入图片描述

我们在以上的代码中,已经成功地在画布上创建了六张子图,每张子图都包含自己的坐标系,之后的图像就绘制在这六个坐标系中。

第三步:绘制图像

matplotlib提供了多种绘制图像的方法,直接调用函数就可以绘制出想要的可视化图像。

import pandas as pd  
from matplotlib import pyplot as plt    
%matplotlib inline  
pokemon_data = pd.read_csv('pokemon.csv')  
plt.figure(figsize=(20, 10))  
ax1 = plt.subplot(2, 3, 1)  
plt.bar(pokemon_data.isLegendary.value_counts().index, height = pokemon_data.isLegendary.value_counts().values)  
plt.subplot(2, 3, 2, sharey=ax1)  
plt.bar(pokemon_data.hasGender.value_counts().index, height = pokemon_data.hasGender.value_counts().values)  
plt.subplot(2, 3, 3, sharey=ax1)  
plt.bar(pokemon_data.hasMegaEvolution.value_counts().index, height = pokemon_data.hasMegaEvolution.value_counts().values)  
plt.subplot(2, 3, 4)  
plt.bar(pokemon_data.Color.value_counts().index, height = pokemon_data.Color.value_counts().values)  
plt.subplot(2, 3, 5)  
plt.bar(pokemon_data.Body_Style.value_counts().index, height = pokemon_data.Body_Style.value
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值