一、什么是Matplotlib

Python的可视化工具包,方便把二维或三维数据进行直观呈现,是用作数据展示的最好的选择。只需几行代码就可以生成图表、直方图、功率谱、条形图、误差图、散点图等等。看见名字里开头的Mat就能想起来典型的Matlab,这个包本身也是参考了Matlab的一些函数的功能,二者之间是存在一些相同之处的。
一般引入Matplotlib库之后,使用约定俗成的plt作为该库调用的别名。

二、绘制基础

使用这个库,主要是在一个空白区域上进行图像的输出,而这个空白区域就是一个figure,用plt.figure函数就可以直接创建一个画布对象,之后在这个画布上进行分割,就可以对子图进行详细的绘制。Figure对象属于顶层对象,包括内部的各种子对象。创建figure的方式有:无显示创建(系统默认会补一个), 简单创建(plt.figure()),多绘图区创建 (plt.subplots()).

绘制时引入Matplotlib库中的pyplot子库,利用这个子库就可以实现很多绘制的快捷方式,下面是一段简单的演示代码:

# (1) 导入模快
import numpy as np
import matplotlib.pyplot as plt
# (2) 准备数据,二维的x,y, 三维x,y,z
x = np.array([-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9])
y = np.square(x)
# (3) 创建一个figure (创建一块画布)
fig = plt.figure()
# (4) 创建一个绘图区域 Axes   (在画布上创建一块绘图区域,画布只有一块但可以有好多个绘图区域)
ax = plt.axes()
# (5) 绘图 (将数据给程序)
plt.plot(x,y)
# (6) 绘制一些装饰 (补充标题,轴名称)
plt.title('plt test')
plt.xlabel('x')
plt.ylabel('y')
# (7) 保存
plt.savefig('存储路径')
# (8) 显示
plt.show()

整个绘制过程很像HTML中的一些操作,绘制过程特别像canvas,先确定“画布”,再确定绘图区域,之后导入数据让程序绘出图像,然后对图像进行补充修饰,之后保存显示。

三、子图划分与合并

获得一张画布之后,如果需要对画图区域做细分,也就是在一个画布上画多个图标,这种情况就涉及到子图的划分与合并了。
子图的划分主要是利用subplot函数,这个函数最重要的两个参数分别是划分后的行、列,划分后可以利用二维数组的索引方式来对任何一个子图做出修改,三个参数在每个参数不超过10的时候可以省略逗号直接写,比如2,1,2可以简写为212。可以结合下面的示例代码来理解:

import matplotlib.pyplot as pltfig = plt.figure()
fig, axes = plt.subplots(2,3)
axes[0][1].plot([1, 2, 3])
plt.show()


也可以使用下面这种方法,不去创建figure对象,直接使用plt的相关操作来绘图,二者的区别在于第一种方法是一次性全部创建好,然后一点一点去填充数据,而第二种方法没创建的子图根本就是一片空白。

import matplotlib.pyplot as pltplt.subplot(2,3,1)
plt.plot([1,2,3],[1,2,3],[1,2,3],[4,5,6])
plt.subplot(2,3,2)
plt.plot([1,2,3],[1,2,3],[1,2,3],[4,5,6])plt.show()


划分的子图有时候要根据需要进行合并,合并成一些小的子图,这时候就需要用到subplot2grid函数,使用这个函数对需要合并的子图进行操作。这个函数有三个参数,前面两个参数都是元组,第一个元组表示分割为多少个子图,第二个元组则表示当前的位置,之后利用colspan或者rowspan来选择合并的范围,示例代码如下:

import matplotlib.pyplot as pltplt.subplot2grid((2, 3), (1, 1), colspan=2)plt.show()


除此之外,还有plt.axes() / figure.add_axes()用于不规整布局,subplot是将画布分割成规整的区域之后绘画,当需要不规整时就是用axes方法。这时需要的参数有四个,绘图的左下角的坐标和绘制图的高度宽度,坐标是根据画布来确定的,画布默认是一个1X1的矩形,下面的例子中,第一次绘图是在左下角(0,0)高度宽度都是1的区域中绘图,这个相当于直接在整个画布上绘制,第二次绘图就改成了在坐标为(0.5,0.5)高度宽度都是0.3的区域中绘图。

fig3 = plt.figure()
# 创建自由布局的绘图区域
fig3.add_axes([0,0,1,1])
plt.plot(x,y)
fig3.add_axes([0.5,0.5,0.3,0.3])
plt.plot(x,x)
plt.show()

三、添加画布内容

获取一张子图之后就可以向图内添加数据来进行绘图,这里以常用的点图进行实例。

绘制点图主要是使用plot函数,函数可以接收任何成组的数据,一组数据包括三个部分:X轴数据、Y轴数据和格式字符串,按照这个格式成组出现,可以在一个图标中绘制多条函数图像。数据的选择可以使用数组或者列表,如果只传入一个数据,则会将这个数据视为Y轴数据,而X轴数据则会根据索引进行匹配,效果如下:

import matplotlib.pyplot as pltplt.plot([1,2,3],'-o')
plt.show()


这段代码中只传入了一个列表的数据,为了方便将传入的点标记了出来,可以看见我们传入的列表的数据变成了Y轴的坐标,而X轴的坐标则是对应原数据在列表中的索引下标,自动补上了0,1,2最后变成了(0,1)(1,2)(2,3)这三个点。
一般来说是不会使用上面这种只输入一半的绘图方式的,正常情况都是输入X和Y的数据之后正常地显示,这种情况下格式字符串反而成了最重要的一个参数,格式字符串用来控制曲线的风格,由颜色字符、风格字符和标记字符三部分组成:
①颜色字符

这部分主要用于调整绘制的图线的颜色,一般来说如果不指定这部分,程序会自动让图线不同颜色,从而更加容易区分是哪一条曲线。
②风格字符

风格字符主要是用于确定绘制图线的线的格式,这部分默认是实线,如果需要更改则利用格式字符串这个部分来进行修改。
③标记字符

这部分主要是确定传入数据对应的点的格式,不选择的情况下默认是第一种点标记,如果需要突出点则需要修改这个字段进行修改。

有了这三个参数,就可以成组进行输入,这样就会在同一张图里面输出多个图像,利用不同的格式字符串就可以更加突出地进行表现:

import matplotlib.pyplot as plt
import numpy as np
a = np.array([1, 2, 3, 4])plt.plot(a, a * a, '-o', a, a * a * a, 'r-x', a, a * a * a * a, '*-')
plt.show()


上面这段代码在一个plot函数中显示了三条线,每条线利用不同的标记表示点的信息,只要成组出现就可以表示多条线。

除此之外,在绘图时还常常用到文本的显示,文本显示包括轴上的注释信息、图的标题、任意位置文本以及带箭头的注解等

其中前面三个个基本没有什么难点,都直接设置即可,不需要考虑位置,因为位置是已经确定的,而后两个就需要注意一下插入的位置,text函数最主要的是三个参数:插入的横轴的坐标、纵轴的坐标以及需要插入的文本内容。插入后会以输入的位置为文字中心,将文字输出在文字中心上,效果如下:

import matplotlib.pyplot as plt
import matplotlib
import numpy as npa = np.array([1, 2, 3, 4])matplotlib.rcParams['font.family'] = 'SimHei'
plt.plot(a, a * a, '-o', a, a * a * a, 'r-x', a, a * a * a * a, '*-')
plt.text(1, 100, '这是一个字符串')
plt.show()


这里插一嘴,如果要使用中文,需要修改一下库的配置信息,上面的这段代码就是这样修改的,也可以在需要输出文字的地方利用fontproperties进行字体的修改,下面的这段代码就是利用了这种方式,显示的效果是一样的。

import matplotlib.pyplot as plt
import matplotlib
import numpy as npa = np.array([1, 2, 3, 4])plt.plot(a, a * a, '-o', a, a * a * a, 'r-x', a, a * a * a * a, '*-')
plt.text(1, 100, '这是一个字符串', fontproperties='SimHei')
plt.show()

带箭头的注释相比于单独添加一个注释,多了一个箭头,所以也多了一个参数来表示箭头的位置,添加这种注释主要是使用annotate函数,这个函数有四个基本参数,第一个参数是文字信息,即注释的文字内容,第二个参数是以元组形式给出的箭头所在的位置,第三个参数则是以元组形式给出的文字的位置,最后是用字典形式给出的箭头的格式信息。

import matplotlib.pyplot as plt
import matplotlib
import numpy as npa = np.array([1, 2, 3, 4])plt.plot(a, a * a, '-o', a, a * a * a, 'r-x', a, a * a * a * a, '*-')
plt.text(1, 100, '这是一个字符串', fontproperties='SimHei')
plt.annotate('这是一个带箭头的注释', fontproperties='SimHei', xy=(2, 50), xytext=(3, 100), arrowprops=dict(facecolor='black', shrink=0.1))
plt.show()


另外也可以使用模板来对绘图进行更加个性化的设计:

plt.xkcd()
#漫画,简笔画 风格
plt.plot(x,y)
plt.show()

四、保存与显示

绘图后如果需要显示或者保存,可以使用提前设定好的函数来进行,使用savefig来保存图片,或者使用show来在本机直接显示图片。其中savefig有一些选项可以用来定制保存的细节:

五、常用的图像绘制

①plot折线图
前面第三部分已经记录过了。
②hist直方图
直方图也称质量分布图,由一系列高低不等的纵向条纹或者线段表示数据分布的情况,横轴为类别纵轴为数量或者占比,常用的参数如下:

其中height比较难理解,这个参数对应的是直方图中直方的个数,就是横向上有多少个柱。

mu,sigma = 100,15
x = mu + sigma * np.random.randn(10000)
plt.hist(x,50,density=True,facecolor='g',alpha=0.75) plt.grid(True) plt.show()


③pie饼图
饼图用于表示不同分类的占比情况,通过弧度来对比各种分类,常用参数如下:

其中比较难理解的是explode这个参数,这个参数表示的是突出的范围,主要是用于强调,需要用一个列表形式来表示,下面这段代码中也使用了这个参量,可见设置的第一个部分突出了一小块,就是这个参量的效果。

labels = ['a','b','c','d']
sizes = [15,30,45,10]
plt.pie(sizes,labels=labels,explode=[0.1,0,0,0])
plt.show()


④scatter散点图
散点图只一个以特征为横坐标,另一个特征为纵坐标,使用坐标点来表示统计关系的一种图,是一种由点组成的图。主要参数如下:

x = np.array([-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9])
y = np.square(x)
plt.scatter(x,x)
plt.show()


附一道作业题,大佬勿喷

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
values = pd.read_csv('C:\\Users\\Binary\\Desktop\\Eueo2012.csv')team = np.array(values['Team'])
goal = np.array(values['Goals'])
percentage = goal.copy()
percentage = 1.0*percentage/sum(percentage)fig = plt.figure(figsize=(15, 15))fig.add_subplot(2, 1, 1)plt.bar(team, goal, width=0.3)
plt.xticks(size='small', rotation=68, fontsize=13)
plt.subplot(2, 1, 2)plt.pie(percentage, labels=team, labeldistance=1.1, autopct='%3.1f%%')
plt.tight_layout()plt.savefig('C:\\Users\\Binary\\Desktop\\ans.png')
plt.show()

运行结果:

Matplotlib库入门相关推荐

  1. python数据展示库_数据分析与展示——Matplotlib库入门

    Matplotlib库入门 Matplotlib库介绍 Matliotlib库是Python优秀的数据可视化第三方库. Matliotlib库的效果见:http://matplotlib.org/ga ...

  2. 第二周 数据分析之展示 Matplotlib库入门

    Matplotlib库介绍:优秀的数据可视化第三方库 使用:Matplotlib库由各种可视化类构成,内部结构复杂,受Matlab启发,matplotlib.pyplot是绘制各类可视化图形的命令子库 ...

  3. python中matplotlib库实例_Python Matplotlib库入门指南

    Matplotlib简介 Matplotlib是一个Python工具箱,用于科学计算的数据可视化.借助它,Python可以绘制如Matlab和Octave多种多样的数据图形.最初是模仿了Matlab图 ...

  4. python的ppt库_Python绘图库matplotlib快速入门.ppt

    Python绘图库matplotlib快速入门 *;*;;快速绘图 matplotlib的pyplot子库提供了和matlab类似的绘图API,方便用户快速绘制2D图表.(matplotlib_sim ...

  5. Python Matplotlib库绘制曲线图 最快入门教程(最详细最简单)

    文章目录 1.导入Matplotlib库 2.最常用的绘图函数plot 3.展示绘制完成的图像 4.保存绘制的图像 5.分割子绘图区域 6.设置横纵轴的坐标轴名称 7.设置图像名称 8.让图像中可以出 ...

  6. Matplotlib 快速入门

    原创2016-08-06Jamal Moir编程派 编程派微信号:codingpy 看完此文如果觉得不错,不妨点击文末广告支持一下 昨天推出的免费赠书活动还在进行,首先感谢大家的积极参与!看了眼前五的 ...

  7. 50题matplotlib从入门到精通

    作者:王大毛(和鲸社区) Matplotlib 是 Python 的绘图库.它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案,也可以和图形工具包一起使用. 虽然相比其他图形库 ...

  8. Matplotlib从入门到精通05-样式色彩秀芳华

    Matplotlib从入门到精通05-样式色彩秀芳华 总结 Matplotlib从入门到精通05-样式色彩秀芳华 导入依赖 一.matplotlib的绘图样式(style)¶ 1.matplotlib ...

  9. Python 数据科学库入门

    Python 数据科学库入门 1.Numpy 1.1Numpy 简介 Numpy(Numerical Python) Numpy:提供了一个在 Python 中做科学计算的基础库,重在数值计算,主要用 ...

最新文章

  1. c语言lookup用法,Vlookup函数最经典的12种用法 果断收藏!
  2. 第二十六讲:基础一开放封闭原则
  3. LAMP 环境搭建实例
  4. Android Material Design TabLayout属性app:tabMode和app: tabGravity
  5. java并发编程之原子性、可见性、有序性
  6. C语言链表的操作和讲解
  7. ubuntu18.04播放mp4提示需要安装MPEG-4 AAC解码器和H.264解码器的解决办法
  8. python打砖块游戏算法设计分析_Python打砖块
  9. CPU32和CPU64区别
  10. 福利,架构师之路定制T恤
  11. 解析几何:第五章 二次曲线(1)圆 椭圆 双曲线
  12. 路由跳转后需要两次调用goback才能正常返回
  13. 退休当月要干到月底吗_到退休年龄,是当月办理退休,还是提前一个月办理?...
  14. vscode源代码管理文件挂起
  15. 天翼云 杭州 云主机(VPS) 性能评测
  16. SpringBoot3.x原生镜像-Native Image尝鲜
  17. uthash.h 哈希表怎么用
  18. 禁闭岛 -- 看电影
  19. 实战篇-OpenSSL之调用EVP框架实现AES多种加密模式
  20. Python 数字图片盲水印

热门文章

  1. Day_2_Python_str_list_dict的使用
  2. 支付弹出窗口被拦截解决办法
  3. Memcached安装及配置
  4. 基于visual Studio2013解决面试题之1102合并字符串
  5. VoltDB开篇 简介
  6. jQuery中的$.getJSON、$.ajax、$.get、$.post的区别
  7. thinkphp事务处理以及无效时的解决方案(整理)
  8. excel文件导出相应数据统计内容
  9. rs(0)与rs(字段名)的区别
  10. open-falcon之query