美文网首页我爱编程matplotlib
Matplotlib 系列之【绘制函数图像】

Matplotlib 系列之【绘制函数图像】

作者: 随时学丫 | 来源:发表于2018-08-03 03:02 被阅读610次

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

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

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

    image

    代码实现

    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 的图像组成部分介绍。

    image

    基本构成

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

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

    image

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

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

    image

    Matplotlib 绘图步骤分析

    image

    注意

    这里不讲解 matplotlib 的安装,我使用的是 Anaconda 的 notebook,因此,可以直接导入 matplotlib 的module,想要安装 Anaconda 的请查看的写的另一篇文章。墙裂推荐 Anaconda | 安利 Python IDE

    如果说不想使用 Anaconda,可以看看这篇推荐文章,教你如何安装 matplotlib(视频和文章教程)— 莫烦 Python -- Matplotlib

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

    一、matplotlib 实现简单图像

    image

    使用 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()
    

    运行结果

    image

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

    二、设置 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()
    

    运行效果

    image

    三、设置坐标轴

    设置 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()
    

    运行结果

    image
    设置 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 轴刻度以及标注变化

    image

    四、移动坐标轴

    隐藏右边框和上边框:

    1. 使用 plt.gca 获取当前坐标轴信息。

    2. 使用 .spines 设置边框:右侧边框;使用.set_color设置边框颜色:默认白色;

      使用 .spines 设置边框:上边框;使用.set_color设置边框颜色:默认白色;

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

    1. 使用 .xaxis.set_ticks_position 设置 x 坐标刻度数字或名称的位置:bottom。(所有位置:topbottombothdefaultnone)。
    2. 使用 .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()
    

    运行结果

    image

    五、设置标题

    使用 .set_title 设置标题,声明标题为 y = x2,字体大小 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()
    

    运行结果

    image

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

    image

    推荐阅读

    来北京的日子

    这么多年都白学了,原来是方法没有用对

    贝斯狸的 Python 之旅 -- 深入切片操作及原理

    墙裂推荐 Anaconda | 安利 Python IDE

    编程界的半壁江山

    好书推荐

    统计学习方法

    最近正在研究机器学习中的算法和公式,朋友给我推荐了这本书,经过一番考察,总算是觉得这本书对得起读者,也值得推荐。

    李航,日本京都大学电气工程系毕业,日本东京大学计算机科学博士。曾任职于日本 NEC 公司中央研究所,微软亚洲研究院高级研究员及主任研究员,现任华为诺亚方舟实验室首席科学家。北京大学、南开大学、西安交通大学客座教授。研究方向包括信息检索、自然语言处理、统计机器学习及数据挖掘。

    豆瓣简介

    详细介绍支持向量机、Boosting、最大熵、条件随机场等十个统计学习方法。

    image

    思维力:高效的系统思维

    王世民,深圳尔雅 CEO,YouCore 创始人,知乎专栏“框架的力量”作者。

    一个矛盾体。心里挺鄙视学历,但不小心念了名校、拿了硕士;崇尚个人自由,但又创办公司绑死了自己;特不喜欢教书,但现在干着培训。一个不安分的人。短短十来年,当过苦逼的IT码农、做过装逼的咨询顾问、现在干着土鳖的民企老板。

    这本书对我的思维能力提升帮助蛮大的,书中提供的很多学习方法都值得借鉴,自从阅读了本书以后,我也喜欢画脑图总结,不断尝试系统学习。我强烈建议读者们去看看【框架的力量】的专栏,对提高你的思维和学习效率很有帮助。

    豆瓣简介

    “真正有用”正是这本书不同于其它思维书籍之处!

    你有没有遇到过以下窘境——分析时想不明白、表达时说不清楚、学习时学不快速?你想不想全面提升你的思维能力?你知道问题解决技巧和表达技巧有哪些吗?

    此书中有你想知道的答案。

    本书分为 3 个部分共 10 章,各章可自成体系地解决一个问题,同时整书又形成一套体系化的系统思维。

    第一部分探秘了“框架”力量的根源。万事万物的本质其实是一个个的系统,而掌握了系统的“框架”也就把握了事物的本质。没有什么问题是不能利用框架解决的,如果一个不行,那就两个。

    第二部分将运用“框架”解决问题分解为五个步骤——界定问题、构建框架、明晰关键、高效执行及检查调整,并精炼了相应的优秀思考方法和工具。此外,还传授了在有限时间、有限资源限制下高质量地解决问题的秘诀——“假设思考”。

    第三部分传授如何运用“框架”有效表达。逐层递进地演示了自上而下表达的魅力,并用丰富的图表阐述了何为“形象化表达”。

    对于想全面提升思维能力的读者,建议按照本书章节顺序阅读;对于迫切想寻求具体问题解决技巧或表达技巧的读者,也可以直接阅读相应章节。

    image

    想要书籍的请在后台留言【180803】获取这两本书的 PDF 版,【思维力:高效的系统思维】附视频教程,希望在学习的道路上,我们能少走弯路,我会尽量推荐自己读过的好书,希望读者们能跟着我一起多读书,读好书。

    image

    相关文章

      网友评论

        本文标题:Matplotlib 系列之【绘制函数图像】

        本文链接:https://www.haomeiwen.com/subject/tibevftx.html