专栏首页AzMarkMatplotlib 系列之「绘制函数图像」

Matplotlib 系列之「绘制函数图像」

预计 3015 字,阅读需要 4 分钟

01

前言

ABOUT

matplotlib 是 python 最著名的绘图库,它提供了一整套和 matlab 相似的命令 API,十分适合交互式进行绘图。

它的文档相当完备,并且 Gallery 页面 中有上百幅缩略图,打开之后都有源程序。因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定。

这是要实现的效果图,利用 Matplotlib 绘制函数 y = x^2^ 的图像。

代码实现

import matplotlib.pyplot as plt
import numpy as np

# 定义 x 变量的范围 (-3,3) 数量 50 
x=np.linspace(-3,3,50)
y=x**2

# Figure 并指定大小
plt.figure(num=3,figsize=(8,5))
# 绘制 y=x^2 的图像,设置 color 为 red,线宽度是 1,线的样式是 --
plt.plot(x,y,color='red',linewidth=1.0,linestyle='--')

# 设置 x,y 轴的范围以及 label 标注
plt.xlim(-1,2)
plt.ylim(-2,3)
plt.xlabel('x')
plt.ylabel('y')

# 设置坐标轴刻度线 
# Tick X 范围 (-1,2) Tick Label(-1,-0.25,0.5,1.25,2) 刻度数量 5 个
new_ticks=np.linspace(-1,2,5)
plt.xticks(new_ticks)

# Tick Y 范围(-2.2,-1,1,1.5,2.4) ,Tick Label (-2.2, -1, 1, 1.5, 2.4) 别名(下面的英文)
plt.yticks([-2.2,-1,1,1.5,2.4],
          [r'$really\ bad$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])


# 设置坐标轴 gca() 获取坐标轴信息
ax=plt.gca()
# 使用.spines设置边框:x轴;将右边颜色设置为 none。
# 使用.set_position设置边框位置:y=0的位置;(位置所有属性:outward,axes,data)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 移动坐标轴
# 将 bottom 即是 x 坐标轴设置到 y=0 的位置。
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))

# 将 left 即是 y 坐标轴设置到 x=0 的位置。
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

# 设置标签
ax.set_title('y = x^2',fontsize=14,color='r')

# 显示图像
plt.show()

首先一幅 Matplotlib 的图像组成部分介绍。

基本构成

在 matplotlib 中,整个图像为一个 Figure 对象。在 Figure 对象中可以包含一个或者多个 Axes 对象。每个 Axes(ax) 对象都是一个拥有自己坐标系统的绘图区域。

所属关系如下(图片来自网络):

图上:Title 为图像标题,Axis 为坐标轴, Label 为坐标轴标注,Tick 为刻度线,Tick Label 为刻度注释。

各个对象关系可以梳理成以下内容(图片来自网络):

02

Matplotlib 绘制步骤

ATPLOTLIB

注意 这里不讲解 matplotlib 的安装,我使用的是 Anaconda 的 notebook,因此,可以直接导入 matplotlib 的module,想要安装 Anaconda 的请查看的写的另一篇文章。 如果说不想使用 Anaconda,可以看看这篇推荐文章,教你如何安装 matplotlib(视频和文章教程)— 莫烦 Python -- Matplotlib

上面虽然贴了全部的代码,有 matplotlib 基础的人一看便懂,但是对于初学者来说,就比较抓脑了。

1

Matplotlib 实现简单图像

使用 import 导入模块 matplotlib.pyplot,并简写成 plt ,使用 import 导入模块 numpy,并简写成 np

#导入 module
import matplotlib.pyplot as plt
import numpy as np

使用 np.linspace 定义 x:范围是 (-3,3),个数是50,仿真一维数据组 (x ,y) 表示曲线。

# 定义 x 变量的范围 (-3,3) 数量 50 
x=np.linspace(-3,3,50)
y=x**2

使用 plt.figure 定义一个图像窗口,使用 plt.plot 画 (x ,y) 曲线,使用 plt.show 显示图像。

#绘制及显示
plt.figure()
plt.plot(x, y)
plt.show()

最终代码

import matplotlib.pyplot as plt
import numpy as np

# 定义 x 变量的范围 (-3,3) 数量 50 
x=np.linspace(-3,3,50)
y=x**2

plt.figure()
plt.plot(x, y)
plt.show()

运行结果

看到这个,是不是和最终效果图差距很大,没关系,我们接着往下看。

2

设置 Figure 图像

使用 plt.figure 定义一个图像窗口:编号为 3,大小为 (8, 5)。使用plt.plot画(x ,y)曲线,曲线的颜色属性(color)为红色。曲线的宽度(linewidth)为1.0。曲线的类型(linestyle)为虚线, 使用plt.show显示图像。

plt.figure(num=3,figsize=(8,5))
plt.plot(x,y,color='red',linewidth=1.0,linestyle='--')

最终代码

import matplotlib.pyplot as plt
import numpy as np

# 定义 x 变量的范围 (-3,3) 数量 50 
x=np.linspace(-3,3,50)
y=x**2

# Figure 并指定大小
plt.figure(num=3,figsize=(8,5))
# 绘制 y=x^2 的图像,设置 color 为 red,线宽度是 1,线的样式是 --
plt.plot(x,y,color='red',linewidth=1.0,linestyle='--')

plt.show()

运行效果

3

设置坐标轴

设置 x,y 轴坐标范围及标注 label

使用 plt.xlim 设置x坐标轴范围:(-1, 2); 使用 plt.ylim 设置 y 坐标轴范围:(-2, 3);

使用 plt.xlabel 设置 x 坐标轴名称:’x’; 使用 plt.ylabel 设置 y 坐标轴名称:’I am y’;

代码实现

import matplotlib.pyplot as plt
import numpy as np

# 定义 x 变量的范围 (-3,3) 数量 50 
x=np.linspace(-3,3,50)
y=x**2

# Figure 并指定大小
plt.figure(num=3,figsize=(8,5))
# 绘制 y=x^2 的图像,设置 color 为 red,线宽度是 1,线的样式是 --
plt.plot(x,y,color='red',linewidth=1.0,linestyle='--')

# 设置 x,y 轴的范围以及 label 标注
plt.xlim(-1,2)
plt.ylim(-2,3)
plt.xlabel('x')
plt.ylabel('y')

plt.show()

运行结果

设置 x, y 刻度范围及刻度标注

设置 x 轴:使用 np.linspace 定义范围以及个数:范围是(-1,2); 个数是 5。

使用 plt.xticks 设置 x 轴刻度:范围是(-1,2); 个数是5。

设置 y 轴:使用 plt.yticks 设置 y 轴刻度以及名称:刻度为 [-2, -1.8, -1, 1.22, 3];对应刻度的名称为 [‘really bad’,’bad’,’normal’,’good’, ‘really good’]。

# 设置坐标轴刻度线 
# Tick X 范围 (-1,2) Tick Label(-1,-0.25,0.5,1.25,2) 刻度数量 5 个
new_ticks=np.linspace(-1,2,5)
plt.xticks(new_ticks)

# Tick Y 范围(-2.2,-1,1,1.5,2.4) ,Tick Label (-2.2, -1, 1, 1.5, 2.4) 别名(下面的英文)
plt.yticks([-2.2,-1,1,1.5,2.4],
          [r'$really\ bad$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])

最终代码

import matplotlib.pyplot as plt
import numpy as np

# 定义 x 变量的范围 (-3,3) 数量 50 
x=np.linspace(-3,3,50)
y=x**2

# Figure 并指定大小
plt.figure(num=3,figsize=(8,5))
# 绘制 y=x^2 的图像,设置 color 为 red,线宽度是 1,线的样式是 --
plt.plot(x,y,color='red',linewidth=1.0,linestyle='--')

# 设置 x,y 轴的范围以及 label 标注
plt.xlim(-1,2)
plt.ylim(-2,3)
plt.xlabel('x')
plt.ylabel('y')

# 设置坐标轴刻度线 
# Tick X 范围 (-1,2) Tick Label(-1,-0.25,0.5,1.25,2) 刻度数量 5 个
new_ticks=np.linspace(-1,2,5)
plt.xticks(new_ticks)

# Tick Y 范围(-2.2,-1,1,1.5,2.4) ,Tick Label (-2.2, -1, 1, 1.5, 2.4) 别名(下面的英文)
plt.yticks([-2.2,-1,1,1.5,2.4],
          [r'$really\ bad$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])

# 显示图像
plt.show()

运行效果,注意看 x, y 轴刻度以及标注变化

4

移动坐标轴

隐藏右边框和上边框:

  • 使用 plt.gca 获取当前坐标轴信息。
  • 使用 .spines 设置边框:右侧边框;使用.set_color设置边框颜色:默认白色;使用 .spines 设置边框:上边框;使用.set_color设置边框颜色:默认白色;

调整坐标轴至中心(将 left 边框调整到 x=0 处,将 bottom 边框调整到 y=0 处):

  • 使用 .xaxis.set_ticks_position 设置 x 坐标刻度数字或名称的位置:bottom。(所有位置:topbottombothdefaultnone)。
  • 使用 .spines 设置边框:x 轴;使用 .set_position设置边框位置:y=0 的位置;(位置所有属性:outwardaxesdata
# 设置坐标轴 gca() 获取坐标轴信息
ax=plt.gca()
# 使用.spines设置边框:x轴;将右边颜色设置为 none。
# 使用.set_position设置边框位置:y=0的位置;(位置所有属性:outward,axes,data)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 移动坐标轴
# 将 bottom 即是 x 坐标轴设置到 y=0 的位置。
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))

# 将 left 即是 y 坐标轴设置到 x=0 的位置。
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

最终代码

import matplotlib.pyplot as plt
import numpy as np

# 定义 x 变量的范围 (-3,3) 数量 50 
x=np.linspace(-3,3,50)
y=x**2

# Figure 并指定大小
plt.figure(num=3,figsize=(8,5))
# 绘制 y=x^2 的图像,设置 color 为 red,线宽度是 1,线的样式是 --
plt.plot(x,y,color='red',linewidth=1.0,linestyle='--')

# 设置 x,y 轴的范围以及 label 标注
plt.xlim(-1,2)
plt.ylim(-2,3)
plt.xlabel('x')
plt.ylabel('y')

# 设置坐标轴刻度线 
# Tick X 范围 (-1,2) Tick Label(-1,-0.25,0.5,1.25,2) 刻度数量 5 个
new_ticks=np.linspace(-1,2,5)
plt.xticks(new_ticks)

# Tick Y 范围(-2.2,-1,1,1.5,2.4) ,Tick Label (-2.2, -1, 1, 1.5, 2.4) 别名(下面的英文)
plt.yticks([-2.2,-1,1,1.5,2.4],
          [r'$really\ bad$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])

# 设置坐标轴 gca() 获取坐标轴信息
ax=plt.gca()
# 使用.spines设置边框:x轴;将右边颜色设置为 none。
# 使用.set_position设置边框位置:y=0的位置;(位置所有属性:outward,axes,data)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 移动坐标轴
# 将 bottom 即是 x 坐标轴设置到 y=0 的位置。
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))

# 将 left 即是 y 坐标轴设置到 x=0 的位置。
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

# 显示图像
plt.show()

运行结果

5

设置标题

使用 .set_title 设置标题,声明标题为 y = x^2^,字体大小 14,颜色为 red。

# 设置标签
ax.set_title('y = x^2',fontsize=14,color='r')

最终代码

import matplotlib.pyplot as plt
import numpy as np

# 定义 x 变量的范围 (-3,3) 数量 50 
x=np.linspace(-3,3,50)
y=x**2

# Figure 并指定大小
plt.figure(num=3,figsize=(8,5))
# 绘制 y=x^2 的图像,设置 color 为 red,线宽度是 1,线的样式是 --
plt.plot(x,y,color='red',linewidth=1.0,linestyle='--')

# 设置 x,y 轴的范围以及 label 标注
plt.xlim(-1,2)
plt.ylim(-2,3)
plt.xlabel('x')
plt.ylabel('y')

# 设置坐标轴刻度线 
# Tick X 范围 (-1,2) Tick Label(-1,-0.25,0.5,1.25,2) 刻度数量 5 个
new_ticks=np.linspace(-1,2,5)
plt.xticks(new_ticks)

# Tick Y 范围(-2.2,-1,1,1.5,2.4) ,Tick Label (-2.2, -1, 1, 1.5, 2.4) 别名(下面的英文)
plt.yticks([-2.2,-1,1,1.5,2.4],
          [r'$really\ bad$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])


# 设置坐标轴 gca() 获取坐标轴信息
ax=plt.gca()
# 使用.spines设置边框:x轴;将右边颜色设置为 none。
# 使用.set_position设置边框位置:y=0的位置;(位置所有属性:outward,axes,data)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 移动坐标轴
# 将 bottom 即是 x 坐标轴设置到 y=0 的位置。
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))

# 将 left 即是 y 坐标轴设置到 x=0 的位置。
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

# 设置标签
ax.set_title('y = x^2',fontsize=14,color='r')

# 显示图像
plt.show()

运行结果

最后,附上 matplotlib 整体结构图(图片来自网络):

本文分享自微信公众号 - Python梦工厂(AzMark950831)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Matplotlib 系列之「Legend 图例」

    Matplotlib 的 Legend 图例就是为了帮助我们展示每个数据对应的图像名称,更好的让读者认识到你的数据结构。

    Python技术与生活认知的分享
  • 自如甲醛房 | 也许只有自己亲眼看见,才会爱护生命

    相信最近朋友圈被一篇【阿里P7员工得白血病身故,生前租了自如甲醛房】推文刷屏了吧,说真的,看到此,我不禁为自己在上海租住自如 8 个月还能正常的活着感到庆幸。

    Python技术与生活认知的分享
  • Python 学习之 Tkinter「下」

    Python技术与生活认知的分享
  • matplotlib学习之基本使用

    1.figure学习2.设置坐标轴3.Legend 图例4.Annotation 标注5.tick能见度

    公众号guangcity
  • python绘图:matplotlib绘图(2)

    matplotlib绘图(2) plt.bar colors=["#348ABD","#A60628"] plt.bar([0,.7], prior, alph...

    ke1th
  • 常见概率分布

    在一次实验中,事件A出现的概率为 ,不出现的概率为 ,若用 记事件A出现的次数,则 仅取值0或1,相应的概率分布为

    用户3577892
  • opencv 4 -- 图像平滑与滤波--核心卷积操作

    opencv提供了四种低通滤波方式,基本原理是一致的,基本都是用 卷积核 进行处理

    wust小吴
  • 机器学习三剑客之Matplotlab绘制条形图直方图饼图

    ? Matplotlib 是Python 2D绘图领域的基础套件,它让使用者将数据图形化,并提供多样化的输出格式。这里将会以四个小案例探索Matplotli...

    zhaoolee
  • 如何画出几种常见二分类损失函数(附代码)

    黄博的机器学习圈子
  • kaggle | 商城客户细分数据

    您有超市购物中心和会员卡,您可以获得有关客户的一些基本数据,如客户ID,年龄,性别,年收入和支出分数。消费分数是您根据定义的参数(如客户行为和购买数据)分配给客...

    润森

扫码关注云+社区

领取腾讯云代金券