• Matplotlib 误差线的绘制和子图的创建方式


    一、绘制误差线

    使用errorbar方法可以绘制误差线。

    x = np.linspace(0,10,50)
    dy=0.8
    y = np.cos(x) + dy*np.random.randn(50)
    plt.errorbar(x, y, yerr=dy, fmt='.k')

    做一些格式上的调整:

    plt.errorbar(x, y, yerr=dy, fmt='ok',ecolor='lightgray',elinewidth=3, capsize=0)

    errorbar方法的一些参数说明:

    • yerr: 绘制垂直方向的误差线
    • xerr:绘制水平方向的误差线
    • fmt: 线条格式
    • ecolor: 误差线的颜色
    • eline误差线的宽度
    • capsize: 误差线的长度

    二、子图的创建方式

    1.手动创建子图

    通过plt.axes函数可以创建基本子图,默认情况下它会创建一个标准的坐标轴,并填满整张图。但是我们可以通过参数配置,实现想要的子图效果。

    这个参数是个列表形式,有四个值,从前往后,分别是子图左下角基点的x和y坐标以及子图的宽度和高度,数值的取值范围是0-1之间,画布左下角是(0,0),画布右上角是(1,1)。

    例如:

    ax1 = plt.axes()  # 使用默认配置,也就是布满整个画布
    ax2 = plt.axes([0.65,0.65,0.2,0.2]) # 在右上角指定位置

    上面是Matlab接口的风格,面向对象画图接口中有类似的fig.add_axes()方法:

    fig = plt.figure()
    ax1 = fig.add_axes([0.1,0.5,0.8,0.4],xticklabels=[],ylim=(-1.2,1.2))
    ax2 = fig.add_axes([0.1,0.1,0.8,0.4],ylim=(-1.2,1.2))
    x = np.linspace(0,10)
    ax1.plot(np.cos(x))
    ax2.plot(np.tan(x))

    2.plt.subplot方法

    subplot的方法接收三个整数参数,分别表示几行、几列、子图索引值。索引值从1开始,从左上角到右下角依次自增。

    for i in range(1, 7):
        plt.subplot(2,3,i)
        plt.text(0.5,0.5,str((2,3,i)), fontsize=16, ha='center')

    子图间距好像不太恰当,可以使用plt.subplots_adjust方法进行调整,它接受水平间距hspace和垂直间距wspace两个参数。

    同样的,面向对象接口也有fig.add_subplot()方法可以使用:

    fig = plt.figure()
    fig.subplots_adjust(hspace=0.4, wspace=0.4)
    for i in range(1,7):
        ax = fig.add_subplot(2,3,i)
        ax.text(0.5,0.5,str((2,3,i)), fontsize=16, ha='center')

    3.快速创建多子图

    可以使用subplots()方法快速的创建多子图环境,并返回一个包含子图的Numpy数组。

    fig, ax = plt.subplots(2,3,sharex='col', sharey='row')

    通过sharex和sharey参数,自动地去掉了网格内部子图的坐标刻度等内容,实现共享,让图形看起来更整齐整洁。

    通过对返回的ax数组进行调用,可以操作每个子图,绘制图形:

    for i in range(2):
        for j in range(3):
            ax[i,j].text(0.5,0.5,str((2,3,i)), fontsize=16, ha='center')

    需要注意的是,subplot()和subplots()两个方法在方法名上差个字母s外,subplots的索引是从0开始的。

    4.GridSpec复杂网格

    之前的子图其实都比较规整,如果想实现不规则的多行多列子图,可以使用plt.GridSpec方法。

    grid = plt.GridSpec(2,3,wspace=0.4,hspace=0.4) # 生成两行三列的网格
    plt.subplot(grid[0,0]) # 将0,0的位置使用
    plt.subplot(grid[0,1:]) # 同时占用第一行的第2列以后的位置
    plt.subplot(grid[1,:2])
    plt.subplot(grid[1,2])

  • 相关阅读:
    cookie,sessionStorage,localStorage
    存储方式与传输方式
    为什么css放在顶部而js写在后面
    常见的web安全及防护原理
    web缓存
    http协议理解
    http与https
    get/post的区别
    JZOJ 3571. 【GDKOI2014】内存分配
    JZOJ 3570. 【GDKOI2014】壕壕的寒假作业
  • 原文地址:https://www.cnblogs.com/lavender1221/p/12800402.html
Copyright © 2020-2023  润新知