美文网首页
matplotlib基本使用方式

matplotlib基本使用方式

作者: b485c88ab697 | 来源:发表于2017-09-10 19:55 被阅读36次

    本文采编自寒小阳老师的课程讲义

    一幅可视化图的基本结构

    通常,使用 numpy 组织数据, 使用 matplotlib API 进行数据图像绘制。 一幅数据图基本上包括如下结构:

    • Data: 数据区,包括数据点、描绘形状

    • Axis: 坐标轴,包括 X 轴、 Y 轴及其标签、刻度尺及其标签

    • Title: 标题,数据图的描述

    • Legend: 图例,区分图中包含的多种曲线或不同分类的数据

    其他的还有图形文本 (Text)、注解 (Annotate)等其他描述

    画法

    下面以常规图为例,详细记录作图流程及技巧。按照绘图结构,可将数据图的绘制分为如下几个步骤:

    • 导入 matplotlib 包相关工具包

    • 准备数据,numpy 数组存储

    • 绘制原始曲线

    • 配置标题、坐标轴、刻度、图例

    • 添加文字说明、注解

    • 显示、保存绘图结果

    下面是一个包含cos、sin、sqrt函数的完整图像:

    #coding:utf-8
    %matplotlib inline
    import numpy as np
    import matplotlib.pyplot as plt
    from pylab import *
    

    准备数据

    x = np.arange(0., 10, 0.2)
    y1 = np.cos(x)
    y2 = np.sin(x)
    y3 = np.sqrt(x)
    

    绘制基本曲线

    使用 plot 函数直接绘制上述函数曲线,可以通过配置 plot 函数参数调整曲线的样式、粗细、颜色、标记等:

    这里r'$$'之间夹的是math公式 语法是latex

    plt.plot(x, y1, color='blue', linewidth=1.5, linestyle='-', marker='.', label=r'$y = cos{x}$')
    plt.plot(x, y2, color='green', linewidth=1.5, linestyle='-', marker='*', label=r'$y = sin{x}$')
    plt.plot(x, y3, color='m', linewidth=1.5, linestyle='-', marker='x', label=r'$y = \sqrt{x}$')
    

    关于颜色的补充

    主要是color参数:

    • r 红色

    • g 绿色

    • b 蓝色

    • c cyan

    • m 紫色

    • y 土黄色

    • k 黑色

    • w 白色

    linestyle 参数

    marker 参数

    marker参数设定在曲线上标记的特殊符号,以区分不同的线段。常见的形状及表示符号如下图所示:

    设置坐标轴

    可通过如下代码,移动坐标轴 spines

    ax = plt.subplot(111)#设置为1张图
    ax.spines['right'].set_color('none')     # 右边边框颜色为白色 其实就相当于去掉边框
    ax.spines['top'].set_color('none')       # 左边边框颜色为白色
    # 移动下边边框线,相当于移动 X 轴
    ax.xaxis.set_ticks_position('bottom')    
    ax.spines['bottom'].set_position(('data', 0))
    # 移动左边边框线,相当于移动 y 轴
    ax.yaxis.set_ticks_position('left')
    ax.spines['left'].set_position(('data', 0))
    

    可通过如下代码,设置刻度尺间隔 lim、刻度标签 ticks

    # 设置 x, y 轴的刻度取值范围
    plt.xlim(x.min()*1.1, x.max()*1.1)
    plt.ylim(-1.5, 4.0)
    # 设置 x, y 轴的刻度标签值
    plt.xticks([2, 4, 6, 8, 10], [r'2', r'4', r'6', r'8', r'10'])
    plt.yticks([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0],
        [r'-1.0', r'0.0', r'1.0', r'2.0', r'3.0', r'4.0'])
    

    可通过如下代码,设置 X、Y 坐标轴和标题:

    # 设置标题、x轴、y轴
    plt.title(r'$the \ function \ figure \ of \ cos(), \ sin() \ and \ sqrt()$', fontsize=19)
    plt.xlabel(r'$the \ input \ value \ of \ x$', fontsize=18, labelpad=88.8)
    plt.ylabel(r'$y = f(x)$', fontsize=18, labelpad=12.5)
    

    设置文字描述、注解

    可通过如下代码,在数据图中添加文字描述 text:

    plt.text(0.5, 0.7, r'$x \in [0.0, \ 10.0]$', color='k', fontsize=15)
    plt.text(0.5, 0.6, r'$y \in [-1.0, \ 4.0]$', color='k', fontsize=15))
    

    可通过如下代码,在数据图中给特殊点添加注解 annotate:

    # 特殊点添加注解
    plt.scatter([8,],[np.sqrt(8),], 50, color ='m')  # 使用散点图放大当前点
    plt.annotate(r'$2\sqrt{2}$', xy=(8, np.sqrt(8)), xytext=(8.5, 2.2), fontsize=16, color='#090909', arrowprops=dict(arrowstyle='->', connectionstyle='arc3, rad=0.1', color='#090909'))
    

    设置图例

    可使用如下两种方式,给绘图设置图例:

    • 1: 在 plt.plot 函数中添加 label 参数后,使用 plt.legend(loc=’up right’)

    • 2: 不使用参数 label, 直接使用如下命令:

    plt.legend(['cos(x)', 'sin(x)', 'sqrt(x)'], loc='upper right')
    

    网格线开关

    可使用如下代码,给绘图设置网格线:

    # 显示网格线
    plt.grid(True)
    

    显示与图像保存

    plt.show()    # 显示
    # savefig('../figures/plot3d_ex.png',dpi=48)    # 保存,前提目录存在
    

    完整的绘制程序

    #coding:utf-8
    
    import numpy as np
    import matplotlib.pyplot as plt
    from pylab import *
    %matplotlib inline
    import matplotlib
    matplotlib.rc('figure', figsize = (20, 15))
    # 定义数据部分
    x = np.arange(0., 10, 0.2)
    y1 = np.cos(x)
    y2 = np.sin(x)
    y3 = np.sqrt(x)
    
    # 绘制 3 条函数曲线
    plt.plot(x, y1, color='blue', linewidth=1.5, linestyle='-', marker='.', label=r'$y = cos{x}$')
    plt.plot(x, y2, color='green', linewidth=1.5, linestyle='-', marker='*', label=r'$y = sin{x}$')
    plt.plot(x, y3, color='m', linewidth=1.5, linestyle='-', marker='x', label=r'$y = \sqrt{x}$')
    
    # 坐标轴上移
    ax = plt.subplot(111)
    ax.spines['right'].set_color('none') # 去掉右边的边框线
    ax.spines['top'].set_color('none') # 去掉上边的边框线
    
    # 移动下边边框线,相当于移动 X 轴
    ax.xaxis.set_ticks_position('bottom')
    ax.spines['bottom'].set_position(('data', 0))
    
    # 移动左边边框线,相当于移动 y 轴
    ax.yaxis.set_ticks_position('left')
    ax.spines['left'].set_position(('data', 0))
    
    # 设置 x, y 轴的取值范围
    plt.xlim(x.min()*1.1, x.max()*1.1)
    plt.ylim(-1.5, 4.0)
    
    # 设置 x, y 轴的刻度值
    plt.xticks([2, 4, 6, 8, 10], [r'2', r'4', r'6', r'8', r'10'])
    plt.yticks([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0],
    [r'-1.0', r'0.0', r'1.0', r'2.0', r'3.0', r'4.0'])
    
    # 添加文字
    plt.text(11, 1.9, r'$x \in [0.0, \ 10.0]$', color='k', fontsize=15)
    plt.text(11, 1.4, r'$y \in [-1.0, \ 4.0]$', color='k', fontsize=15)
    
    # 特殊点添加注解
    plt.scatter([8,],[np.sqrt(8),], 50, color ='m') # 使用散点图放大当前点
    plt.annotate(r'$2\sqrt{2}$', xy=(8, np.sqrt(8)), xytext=(8.5, 2.2), fontsize=16, color='#090909', arrowprops=dict(arrowstyle='->', connectionstyle='arc3, rad=0.1', color='#090909'))
    
    # 设置标题、x轴、y轴
    plt.title(r'$the \ function \ figure \ of \ cos(), \ sin() \ and \ sqrt()$', fontsize=19)
    plt.xlabel(r'$the \ input \ value \ of \ x$', fontsize=18, labelpad=88.8)
    plt.ylabel(r'$y = f(x)$', fontsize=18, labelpad=12.5)
    
    # 设置图例及位置
    plt.legend(loc='upper left')
    # plt.legend(['cos(x)', 'sin(x)', 'sqrt(x)'], loc='up right')
    
    # 显示网格线
    plt.grid(True)
    
    # 显示绘图
    plt
    

    进阶

    相关文章

      网友评论

          本文标题:matplotlib基本使用方式

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