1.简介:

Matplotlib是一个用来可视化的第三方工具包.
我们在使用这个包之前需要先将其下载到Python解释器中,使用pip即可.
下载命令:

pip install matplotlib

因为使用matplotlib,一定会使用numpy,所以也得提前准备好numpy
numpy是科学计算库,经常用来计算矩阵等

pip install numpy

2.使用

(1)绘制直线

代码:

# coding:utf-8
import numpy as np
import matplotlib.pyplot as plt"""绘制一条直线
"""# 通过numpy创造50个数据,范围为从-1到1
x = np.linspace(-1, 1, 50)
# y值
y = x - 1
# 通过自变量和因变量进行绘制
plt.plot(x, y)
# 进行展示
plt.show()

效果展示:

(2)figure的使用

代码:

# coding:utf-8
import numpy as np
import matplotlib.pyplot as plt"""figure的使用
"""# 造数据, 在-1~1之间均匀生成50个数
x = np.linspace(-1, 1, 50)# 编号为2的图像,通过figsize参数设置图像的大小
plt.figure(num=2, figsize=(8, 5))
y1 = x - 1
# 绘制编号为2的图像
plt.plot(x, y1)# 编号为3的图像 ,figsize=(宽, 高)
plt.figure(num=3, figsize=(5, 8))
y2 = x**2
# 绘制编号为3的图像,  绘制的有两条
plt.plot(x, y2)
# color参数用来设置线条颜色,linewidth参数用来设定线条宽度,linestyle参数用来设定线条样式
plt.plot(x, y1, color="red", linewidth=10.0, linestyle="--")# 进行展示
plt.show()

效果展示:


(3)对图像的坐标轴进行设定

代码:

# coding:utf-8
import matplotlib.pyplot as plt
import numpy as np"""对图像的坐标轴进行设定
"""# 造数据, 在-1~1之间均匀生成50个数
x = np.linspace(-1, 1, 50)
y = x**2
plt.plot(x, y, color="red", linewidth=2.0, linestyle="--")
# 设定x的范围
plt.xlim(-2, 2)
# 设定y的范围
plt.ylim(-2, 2)# 设置x轴描述
plt.xlabel("I am x")
# 设置y轴描述
plt.ylabel("I am y")# 设置每一格的宽度,参数-2是起始,参数1是终止,参数5是刻度总数
new_ticks = np.linspace(-2, 1, 5)
# print(new_ticks)
# 设定新的横轴刻度
plt.xticks(new_ticks)# 设定新的纵轴刻度
# 前后加上美元符号,使字体变的好看起来
# 如何打印出数学中的alpha,使用\进行转义
plt.yticks([-2, -1, 0, 1, 2],[r"$really\ bad$", r"$bad\ \alpha$", r"$normal$", r"$good$", r"$really\ good$"])# 进行绘制
plt.show()

效果展示:

(4)对边框的操作

代码:

# coding:utf-8
import matplotlib.pyplot as plt
import numpy as np"""对坐标轴进行设置2
"""# 造数据
x = np.linspace(-1, 1, 50)
y = x + 1
plt.plot(x, y, color="red", linewidth=2.0, linestyle="--")
# 设置X轴范围
plt.xlim(-2, 2)
# 设置Y轴范围
plt.ylim(-2, 2)
# 设置x轴描述
plt.xlabel("I AM X")
plt.ylabel("I AM Y")# 重新设置刻度
plt.yticks([-2, -1, 0, 1, 2],[r"$really\ bad$", r"$bad$", r"$normal$", r"$good$", r"$really\ \alpha good$"])# 获取到图像的四个边框
ax = plt.gca()
ax.spines["right"].set_color("none")
ax.spines["top"].set_color("none")# 将边框设置为x轴和y轴
ax.xaxis.set_ticks_position("bottom")
ax.yaxis.set_ticks_position("left")
# 将下边框移动到数值为0的位置
ax.spines["bottom"].set_position(('data', 0))
# 将左边框移动到数值为0的位置
ax.spines["left"].set_position(("data", 0))plt.show()

效果展示:

(5)添加图例

代码:

# coding:utf-8
import matplotlib.pyplot as plt
import numpy as np"""给图片加上图例legend
"""# 造数据
x = np.linspace(-1, 1 ,50)
y1 = x**2# 设定x的范围
plt.xlim(-2, 2)
# 设定y的范围
plt.ylim(-2, 2)# 设置x轴描述
plt.xlabel("I am x")
# 设置y轴描述
plt.ylabel("I am y")# 设置每一格的宽度,参数2是起始,参数1是终止,参数5是刻度总数
new_ticks = np.linspace(-2, 1, 5)
# print(new_ticks)
# 设定新的横轴刻度
plt.xticks(new_ticks)# 设定新的纵轴刻度
# 前后加上美元符号,使字体变的好看起来
# 如何打印出数学中的alpha,使用\进行转义
plt.yticks([-2, -1, 0, 1, 2],[r"$really\ bad$", r"$bad\ \alpha$", r"$normal$", r"$good$", r"$really\ good$"])y2 = -x + 1
# plt.plot(x, y2, label="one")
# # 添加图例
# plt.legend()l1, = plt.plot(x, y1, color="red", linewidth=2.0, linestyle="--", label="two")
l2, = plt.plot(x, y2, label="one")
# loc="best"表示将自适应最佳的位置
plt.legend(handles=[l1, l2, ], labels=["aaa", "bbb"], loc="best")
# 进行绘制
plt.show()

效果展示:

(6)对图片做注释

代码:

# coding:utf-8
import matplotlib.pyplot as plt
import numpy as np"""对图片进行标注
"""# 造数据
x = np.linspace(-5, 5, 20)
y = 2*x + 1
plt.plot(x, y)# 设定x轴范围
plt.xlim(-4, 4, 9)
# 设定y轴范围
plt.ylim(-8, 8, 9)# 设定x轴描述
plt.xlabel("I AM X")
# 设定y轴描述
plt.ylabel("I AM Y")# 获取图像的边框
ax = plt.gca()
ax.spines["right"].set_color("None")
ax.spines["top"].set_color("None")# 移动剩下的边框
ax.spines["bottom"].set_position(("data", 0))
ax.spines["left"].set_position(("data", 0))# 展示一个点
x0 = 1
y0 = 2 * x0 + 1
# 标一个点
plt.scatter(x0, y0, color="b", s=100)
plt.plot([x0, x0], [y0, 0], "k--", lw=2.5)# 进行注释,方式一
plt.annotate(r'$2x+1=%s$' % y0, xy=(x0, y0), xycoords="data", xytext=(+30, -30),textcoords="offset points", fontsize=16,arrowprops=dict(arrowstyle="->", connectionstyle="arc3, rad=.2"))plt.text(-4.7, 3, r'$This\ is\ the\ some\ text.\ \mu\ \sigma_i\ \alpha_t$',fontdict={"size": 16, "color": 'r'})plt.show()

效果展示:

(7)绘制散点图

代码:

# coding:utf-8
import matplotlib.pyplot as plt
import numpy as np"""绘制散点图
"""n = 1024
# 按照正态分布(也叫做高斯分布)生成n个均值为0,标准差为1的随机数
X = np.random.normal(0, 1, n)
Y = np.random.normal(0, 1, n)
# 为了生成颜色
T = np.arctan2(X, Y)# alpha代表透明度
plt.scatter(X, Y, s=75, c=T, alpha=0.7)
# 设定x轴范围
plt.xlim((-1.5, 1.5))
plt.ylim((-1.5, 1.5))# 将x轴y轴的数值进行隐藏
plt.xticks(())
plt.yticks(())
# 进行展示
plt.show()

效果展示:

(8)绘制柱状图

代码:

# coding:utf-8
import matplotlib.pyplot as plt
import numpy as np"""绘制柱状图
"""n = 12
X = np.arange(n)
# uniform表示均匀分布,从均匀分布中生成n个,范围为[0.5, 1.0)的随机数!
Y1 = (1-X/float(n))*np.random.uniform(0.5, 1.0, n)
Y2 = (1-X/float(n))*np.random.uniform(0.5, 1.0, n)# facecolor表示直方颜色,edgecolor表示直方边缘颜色
plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='green')
plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')for x, y in zip(X, Y1):# ha:水平方向居中对齐 va:竖直方向向下对齐# x,y为文字放置的位置plt.text(x, y+0.05, '%.2f' % y, ha="center", va="bottom")for x, y in zip(X, Y2):plt.text(x, -y-0.1, '-%.2f' % y, ha="center", va="bottom")plt.xlim(-.5, n)
# 消除x轴的数值
# plt.xticks(())
plt.ylim(-1.25, 1.25)
# 消除y轴数值
# plt.yticks(())plt.show()

效果展示:

(9)绘制等高线

代码:

# coding:utf-8
import numpy as np
import matplotlib.pyplot as plt"""等高线的绘制
"""# 计算高度的函数
def f(x,y):return (1- x/2 + x**5 + y**3) * np.exp(-x**2-y**2)n = 256
# 生成范围为-3~3,生成点的个数为256,间隔均匀
x = np.linspace(-3, 3, n)
# 生成范围为-3~3,生成点的个数为256,间隔均匀
y = np.linspace(-3, 3, n)
# print(x)
# print(y)
# 生成网格点坐标矩阵,通俗的讲就是,将x坐标一个一个对应上y坐标,相当于形成了网格坐标!!!
X, Y = np.meshgrid(x, y)
# print(X)
# print(Y)
# 参数8表示将颜色等级分为10部分。因为为0时,将颜色等级分为了两部分!!!
# cmap表示热力图的形式,
plt.contourf(X, Y, f(X,Y), 8, alpha=0.75, cmap=plt.cm.hot)# 画等高线的线
C = plt.contour(X,Y, f(X,Y), 8, colors="black", linewidth=.5)# 给等高线加上数值, inline为True表示数值显示在线里面!!!
plt.clabel(C, inline=True, fontsize=10)
# 去掉x坐标轴
plt.xticks(())
# 去掉y坐标轴
plt.yticks(())
# 展示
plt.show()

效果展示:

(10)模块数据可视化–图片处理

代码:

# coding:utf-8
import matplotlib.pyplot as plt
import numpy as np"""图像image
"""
# 表示把一个一维数组重新生成一个3行3列的二维数组
a = np.array([0.313660827978,0.365348418405,0.423733120134,0.365348418405,0.439599930621,0.525083754405,
0.423733120134,0.525083754405,0.651536351379]).reshape(3,3)# interpolation表示间隔形式  cmap表示颜色  origin:绘制方向,lower从下向上绘制,upper从上向下绘制
plt.imshow(a, interpolation='nearest', cmap='rainbow', origin='lower')# shrink参数是将colorbar高度压缩为图像比例的0.5
plt.colorbar(shrink=0.5)plt.xticks(())
plt.yticks(())
plt.show()

效果展示:

(11)绘制3D图形

代码:

# coding:utf-8
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
"""3D图像
"""fig = plt.figure()
# 添加3D坐标轴
ax = Axes3D(fig)X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
# 生成网格点坐标矩阵,通俗的讲就是,将x坐标一个一个对应上y坐标,相当于形成了网格坐标!!!
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2+Y**2)Z = np.sin(R)# 参数rstride表示行跨,cstride表示列跨
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap("rainbow"))# zdir参数表示将压到哪个轴    offset参数表示等高线图的平面将压到哪个位置
ax.contourf(X, Y, Z, zdir='z', offset=-1.5, cmap='rainbow')
ax.set_zlim(-2, 2)
plt.show()# 展示
plt.show()

效果展示:

(12)一张大图中放置子图

代码:

# coding:utf-8
import matplotlib.pyplot as plt
import numpy as np"""在一张图中放置几张子图
"""plt.figure()# 2表示总共两行,1表示当前行只有一列,最后一个类表示图形的计数
plt.subplot(2, 1, 1)
# 第一个列表表示x轴数据,第二个列表表示y轴数据,
plt.plot([0, 1], [0, 1])# 第一行本该放三个,结果一个图把一行都占了,仍然计数,所以第二行第一列为第四个
plt.subplot(2, 3, 4)
plt.plot([0, 1], [0, 1])plt.subplot(2, 3, 5)
plt.plot([0, 1], [0, 1])plt.subplot(2, 3, 6)
plt.plot([0, 1], [0, 1])plt.show()

效果展示:

(13)多种形式绘制子图

代码:

# coding:utf-8
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec"""在一张图里面画多张图的其他方法
"""# 方法一:subplot2grid
plt.figure()
# 划定三行三列,其中ax1图在第0行第0列位置,行间距占1,列间距占3
ax1 = plt.subplot2grid((3,3), (0,0), rowspan=1, colspan=3)
# 绘制ax1的图形
ax1.plot([1, 2], [1, 2])
# 设定ax1图片的标题
ax1.set_title("ax1_title")
ax2 = plt.subplot2grid((3, 3), (1, 0), rowspan=1, colspan=2)
ax3 = plt.subplot2grid((3, 3), (1, 2), rowspan=2, colspan=1)
ax4 = plt.subplot2grid((3, 3), (2, 0), rowspan=1, colspan=1)
ax5 = plt.subplot2grid((3, 3), (2, 1), rowspan=1, colspan=1)plt.show()

效果展示:

代码:

# coding:utf-8
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec"""在一张图里面画多张图的其他方法
"""# 方法二:类似切片的形式
plt.figure()
gs = gridspec.GridSpec(3, 3)
ax1 = plt.subplot(gs[0, :])
ax2 = plt.subplot(gs[1, :2])
ax3 = plt.subplot(gs[1:, 2])
ax4 = plt.subplot(gs[-1, 0])
ax5 = plt.subplot(gs[-1, -2])
plt.show()

效果展示:

代码:

# coding:utf-8
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec"""在一张图里面画多张图的其他方法
"""
# 方法三:
# 共享X轴和Y轴
f, ((ax11, ax12), (ax21, ax22)) = plt.subplots(2, 2, sharex=True, sharey=True)
ax11.scatter([1, 2], [1, 2])
ax12.scatter([1, 2], [1, 2])
ax21.scatter([1, 2], [1, 2])
ax22.scatter([1, 2], [1, 2])plt.show()

效果展示:

(14)绘制图中图

代码:

# coding:utf-8
import matplotlib.pyplot as plt
import numpy as npfig = plt.figure()
x = [1, 2, 3, 4, 5, 6, 7]
y = [1, 3, 4, 2, 5, 8, 6]left, bottom, width, height = 0.1, 0.1, 0.8, 0.8
ax1 = fig.add_axes([left, bottom, width, height])
ax1.plot(x, y, 'r')# 设置x轴y轴描述信息
plt.xlabel("x")
plt.ylabel("y")
plt.title("big figure")# 绘制图中图,小图1
# 设置图像对应的位置,这里使用的是百分比
left, bottom, width, height = 0.2, 0.6, 0.25, 0.25
ax2 = fig.add_axes([left, bottom, width, height])
ax2.plot(y, x, "b")
ax2.set_title("small figure1")
ax2.set_xlabel("X")
ax2.set_ylabel("Y")# 小图2
left, bottom, width, height = 0.6, 0.2, 0.25, 0.25
plt.axes([left, bottom, width, height])
plt.plot( x, y[::-1], "g")
plt.title("small figure2")
plt.ylabel("Y")
plt.xlabel("X")plt.show()

效果展示:

(15)次坐标轴

代码:

# coding:utf-8
import matplotlib.pyplot as plt
import numpy as np"""次坐标轴
"""x = np.arange(0, 10, 0.1)
y1 = 0.05 * x ** 2
y2 = -5 * y1fig, ax1 = plt.subplots()
# 让ax2与ax1共享x坐标轴!!!
ax2 = ax1.twinx()
ax1.plot(x, y1, 'g-')
ax2.plot(x, y2, 'b--')ax1.set_xlabel("X data")
ax1.set_ylabel('Y1', color="g")
ax2.set_ylabel('Y2', color="b")plt.show()

效果展示:

(16)绘制动态图

代码:

# coding:utf-8
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import animation"""使用动画显示数据
"""
# 生成子图,相当于fig = plt.figure(),ax = fig.add_subplot(),其中ax的函数参数表示把当前画布进行分割
fig, ax = plt.subplots()# 范围是0~2π, 步长为0.01
x = np.arange(0, 2*np.pi, 0.01)
line, =ax.plot(x, np.sin(x))def animate(i):line.set_ydata(np.sin(x+i/10))return line,def init():line.set_ydata(np.sin(x))return line,# 生成动画
'''
函数FuncAnimation(fig,func,frames,init_func,interval,blit)是绘制动图的主要函数,其参数如下:a.fig 绘制动图的画布名称b.func自定义动画函数,即程序中定义的函数animatec.frames动画长度,一次循环包含的帧数,在函数运行时,其值会传递给函数animate(i)的形参“i”d.init_func自定义开始帧,即传入刚定义的函数init,初始化函数e.interval更新频率,以ms计f.blit选择更新所有点,还是仅更新产生变化的点。应选择True,但mac用户请选择False,否则无法显示
'''
ani = animation.FuncAnimation(fig=fig, func=animate, frames=100, init_func=init, interval=20, blit=True)plt.show()

效果展示:

3.Matplotlib总结完毕,撒花!!!

Python数据分析之Matplotlib(保姆级教程)相关推荐

  1. Python破解WIFI升级版保姆级教程,多线程破解+界面(附赠密码本)

    目录 前言 1.安装python的包 多线程破解教程 基本流程 密码本如下 完整代码如下 破解效果如下 界面版本WiFi破解 注意 代码 破解效果图如下 总结 前言 有很多小伙伴想要破解WiFi密码, ...

  2. CAN通讯-使用Python收发CAN数据保姆级教程(包含完整代码)

    CAN通讯-使用Python收发CAN数据 配置环境 1.环境配置 1.1安装CAN通讯需要的包 1.2 安装kvaser_drivers以及Kvaser CanKing 2.使用Python收发数据 ...

  3. Python爬虫之入门保姆级教程,学不会我去你家刷厕所

    注重版权,转载请注明原作者和原文链接 作者:Bald programmer 今天这个教程采用最简单的爬虫方法,适合小白新手入门,代码不复杂 文章目录 今天这个教程采用最简单的爬虫方法,适合小白新手入门 ...

  4. 保姆级教程!将 Vim 打造一个 IDE (Python 篇)

    从上周开始我就开始折腾 ,搞了一下 Vim IDE for Python & Go,我将整个搭建的过程整理成本篇文章分享出来,本篇是 Python 版本的保姆级教程,实际上我还写了 Go 版本 ...

  5. 【图解SHA1杂凑算法】SHA1杂凑算法的Python实现保姆级教程 | 物联网安全 | 信息安全

    系列索引:[图解安全加密算法]加密算法系列索引 Python保姆级实现教程 | 物联网安全 | 信息安全 起初写实验时找到的代码大多基于c/c++,python可参考的资料很少,所以借着这次实验的机会 ...

  6. 保姆级教程如何用Xcode搭建python环境

    保姆级教程如何用mac电脑中的Xcode搭建python环境(xcode12) 「mac电脑自带python2.7,你也可以更新你的python版本」 打开Xcode,点击file-new-proje ...

  7. 数仓建设保姆级教程,离线和实时一网打尽(理论+实战)

    本文大纲: 因内容较多,带目录的PDF查看是比较方便的,点击下方链接获取完整PDF版: 数仓建设保姆级教程PDF文档 一.数仓基本概念 1. 数据仓库架构 我们在谈数仓之前,为了让大家有直观的认识,先 ...

  8. zeppelin安装和配置(保姆级教程)

    zeppelin简单介绍: Zeppelin是一个基于Web的notebook,提供交互数据分析和可视化.支持多种数据引擎,如hive.spark等.还支持多种编程语言,如python.Scala等. ...

  9. 判断是不是链接 正则_Python 正则表达式 保姆级教程,小学生都看得懂!!

    ~点击 蓝字 关注,获取更多资源~ 0 前言 上一篇文章,2020,还不会正则???,和小伙伴们一起学习了 Python 中的正则表达式,读完之后,总感觉少了点什么东西,无法尽兴?就好像爱你们的心少了 ...

  10. 天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

    天才少年稚晖君 | [保姆级教程]个人深度学习工作站配置指南 来源:https://zhuanlan.zhihu.com/p/336429888 0. 前言 工作原因一直想配置一台自己的深度学习工作站 ...

最新文章

  1. 几行代码实现老照片上色复原!
  2. DX使用随记--GroupControl
  3. capistrano
  4. Python多线程和队列结合demo
  5. POJ-3693 Maximum repetition substring 后缀数组
  6. SpringSecurity的认识和整合流程
  7. 神奇的go语言(基本语法)
  8. Python实战之Selenium自动化测试web刷新FW
  9. LM3886-SVO純直流功率放大器
  10. AD快捷键的设置及推荐
  11. 微生物组数据系统发育分析的方法
  12. html 图片循环轮播,如何在Web端实现动画切换效果一致的无限循环图片轮播?
  13. string类----猜词游戏
  14. [转]虚拟化系列-Windows server 2012 Remote桌面与应用
  15. csharp 在万年历中计算显示农历日子出错
  16. 二十一世纪大学英语读写教程(第三册)学习笔记(原文)——10 - Plain Talk About Handling Stress(浅谈如何缓解压力)
  17. HTML5 全局属性
  18. 知识图谱-KGE-语义匹配-双线性模型-2019:QuatE
  19. 2019届华为秋招面试
  20. Spring Doc OpenAPI3.0 抛弃SpringFox拥抱SpringDoc

热门文章

  1. niushop二次开发常见问题
  2. 选择使用DTU需要注意什么
  3. mybatis深度解析
  4. 说说C语言在生活中的应用
  5. 十年云化之路 中国移动快速向下一代IT架构转型
  6. HZAU 1018 Catching Dogs
  7. Springboot整合Mybatis generator
  8. 1049 最后一块石头的重量 II(零一背包问题)
  9. pkg.go.dev 的由来
  10. 计算与算计的区别是: