zoukankan      html  css  js  c++  java
  • Matplotlib 图形绘制


    章节


    本章我们将从一个简单的图形开始,演示各种绘图方法,逐步丰富图形,使其更美观。

    使用默认属性绘图

    Matplotlib中,绘制图形时,可以设置一些属性,包括:图形大小、dpi、行宽、颜色和样式、坐标轴、网格属性、文本和字体属性等等。如果不设置,则将使用属性的默认值。

    示例

    使用默认设置,绘制正弦函数和余弦函数的曲线图。

    # 导入numpy库与matplotlib.pyplot库
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 准备数据
    X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
    C, S = np.cos(X), np.sin(X)
    
    # 绘制曲线
    plt.plot(X, C)
    plt.plot(X, S)
    
    # 显示图像
    plt.show()
    

    绘制图形:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QQfj20wz-1571969290446)(https://www.qikegu.com/wp-content/uploads/2019/07/mat2-1.png)]

    属性设置

    在下面的示例中,我们显式地列出了所有影响绘图的属性及其默认值。

    示例

    # 导入numpy库与matplotlib.pyplot库
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 创建一个大小为8x6英寸的图形,每英寸80个点
    plt.figure(figsize=(8, 6), dpi=80)
    
    # 从1x1的网格创建一个新的子图
    plt.subplot(1, 1, 1)
    
    X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
    C, S = np.cos(X), np.sin(X)
    
    # 用宽度为1(像素)的蓝色连续线绘制余弦曲线
    plt.plot(X, C, color="blue", linewidth=1.0, linestyle="-")
    
    # 用宽度为1(像素)的绿色连续线绘制正弦曲线
    plt.plot(X, S, color="green", linewidth=1.0, linestyle="-")
    
    # 设置 x 限制
    plt.xlim(-4.0, 4.0)
    
    # 设置 x ticks
    plt.xticks(np.linspace(-4, 4, 9, endpoint=True))
    
    # 设置 y 限制
    plt.ylim(-1.0, 1.0)
    
    # 设置 y ticks
    plt.yticks(np.linspace(-1, 1, 5, endpoint=True))
    
    # 保存图形,使用72点每英寸
    # plt.savefig("exercise_2.png", dpi=72)
    
    # 在屏幕上显示结果
    plt.show()
    

    绘制图形:

    Matplotlib 图形绘制1

    改变颜色和线宽

    我们想让cos用蓝色,sin用红色,它们都用一条更粗的线绘制,同时稍微改变图形大小。

    ...
    plt.figure(figsize=(10, 6), dpi=80)
    plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-")
    plt.plot(X, S, color="red",  linewidth=2.5, linestyle="-")
    ...
    

    绘制图形:

    Matplotlib 图形绘制2

    设定界限

    这个图形的边缘限制有点太紧了,我们想留出一些空间,以便清楚地看到所有的数据点。

    ...
    plt.xlim(X.min() * 1.1, X.max() * 1.1)
    plt.ylim(C.min() * 1.1, C.max() * 1.1)
    ...
    

    绘制图形:

    Matplotlib 图形绘制3

    设置刻度

    坐标轴刻度可以设置,我们把坐标轴刻度设置为`(+/-π, +/-π/2)。

    ...
    plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi])
    plt.yticks([-1, 0, +1])
    ...
    

    绘制图形:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kP7j9nI0-1571969290452)(https://www.qikegu.com/wp-content/uploads/2019/07/mat3_4.png)]

    设置刻度标签

    上面的坐标轴刻度都是数字,可以设置刻度标签。

    ...
    plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
              [r'$-pi$', r'$-pi/2$', r'$0$', r'$+pi/2$', r'$+pi$'])
    
    plt.yticks([-1, 0, +1],
              [r'$-1$', r'$0$', r'$+1$'])
    ...
    

    绘制图形:

    Matplotlib 图形绘制5

    移动图形(相对于坐标轴)

    可以相对于坐标轴移动图像。

    ...
    ax = plt.gca()  # gca 表示 'get current axis', 获取当前坐标轴
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.xaxis.set_ticks_position('bottom')
    ax.spines['bottom'].set_position(('data',0))
    ax.yaxis.set_ticks_position('left')
    ax.spines['left'].set_position(('data',0))
    ...
    

    绘制图形:

    Matplotlib 图形绘制6

    添加图例

    图例是位于图形一角或一侧的说明,解释各种符号和颜色的意义,有助于更好地理解图形。

    ...
    plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
    plt.plot(X, S, color="red",  linewidth=2.5, linestyle="-", label="sine")
    
    plt.legend(loc='upper left')
    ...
    

    绘制图形:

    Matplotlib 图形绘制7

    添加注解

    可以使用annotate命令对一些点添加注解。在x=2π/3处, 画一条虚线,标出sin与cos曲线上对应的点。注解支持latex格式。

    ...
    t = 2 * np.pi / 3
    plt.plot([t, t], [0, np.cos(t)], color='blue', linewidth=2.5, linestyle="--") # 画虚线
    plt.scatter([t, ], [np.cos(t), ], 50, color='blue') # 画点
    
    # 添加注解
    plt.annotate(r'$cos(frac{2pi}{3})=-frac{1}{2}$',
                 xy=(t, np.cos(t)), xycoords='data',
                 xytext=(-90, -50), textcoords='offset points', fontsize=16,
                 arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
    
    plt.plot([t, t],[0, np.sin(t)], color='red', linewidth=2.5, linestyle="--") # 画虚线
    plt.scatter([t, ],[np.sin(t), ], 50, color='red') # 画点
    
    # 添加注解
    plt.annotate(r'$sin(frac{2pi}{3})=frac{sqrt{3}}{2}$',
                 xy=(t, np.sin(t)), xycoords='data',
                 xytext=(+10, +30), textcoords='offset points', fontsize=16,
                 arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
    ...
    

    绘制图形:

    Matplotlib 图形绘制8

    细节微调

    由于有蓝色和红色的线,现在几乎看不到刻度标签。我们调整它们的字体和颜色,让它们看起来更清晰。

    ...
    for label in ax.get_xticklabels() + ax.get_yticklabels():
        label.set_fontsize(16) # 调整字体大小
        label.set_bbox(dict(facecolor='white', edgecolor='None', alpha=0.65)) # 调整颜色
    ...
    

    绘制图形:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mWeWsFRs-1571969290458)(https://www.qikegu.com/wp-content/uploads/2019/07/mat3_9.png)]

  • 相关阅读:
    phpmyadmin和网页上面的乱码问题
    整理: Android HAL
    warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]-给char* 形参 传入 宏定义字符串
    ubuntu 输入法莫名其妙变繁体
    linux内核版本号添加字符/为何有时会自动添加“+”号以及怎么去掉
    Unable to handle kernel NULL pointer dereference at virtual address 00000000
    Ubuntu 18.04 安装 Samba 服务器及配置
    linux查看版本信息
    图解:电压掉电监测电路如何实现检测工作?
    精密全波整流+一阶RC滤波器检测市电电压
  • 原文地址:https://www.cnblogs.com/jinbuqi/p/11848241.html
Copyright © 2011-2022 走看看