zoukankan      html  css  js  c++  java
  • matplotlib库介绍

    matplotlib库

    在介绍此篇文章之前,可结合该总结来看(学习例子当中的第一篇文章):点击这里

    ————参考文章:

    1.matplotlib(扩展)绘图的核心原理讲解:https://baijiahao.baidu.com/s?id=1659039367066798557&wfr=spider&for=pc

    2.Matplotlib.pyplot (所使用到的)常用方法:https://www.cnblogs.com/shaosks/p/9849446.html

    3.详细具体些地讲解(只讲所运用到的):

     ①.figure语法及操作

     (1)figure语法说明

     figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)

     num:图像编号或名称,数字为编号 ,字符串为名称
     figsize:指定figure的宽和高,单位为英寸;
     dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80 1英寸等于2.5cm,A4纸是 21*30cm的纸张
     facecolor:背景颜色
     edgecolor:边框颜色
     frameon:是否显示边框
     (2)例子:

     import matplotlib.pyplot as plt
     #创建自定义图像
     fig=plt.figure(figsize=(4,3),facecolor='blue')
     plt.show()

    输出4*3的蓝色图像

     

    ②imshow 介绍————编写时参考文章:点此进入

    热图(heatmap)是数据分析的常用方法,通过色差、亮度来展示数据的差异、易于理解。Python在Matplotlib库中,调用imshow()函数实现热图绘制

    imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, shape=None, filternorm=1, filterrad=4.0, imlim=None, resample=None, url=None, hold=None, data=None, **kwargs)

    其中,X变量存储图像,可以是浮点型数组、unit8数组以及PIL图像,如果其为数组,则需满足一下形状:
        (1) M*N      此时数组必须为浮点型,其中值为该坐标的灰度;
        (2) M*N*3  RGB(浮点型或者unit8类型)
        (3) M*N*4  RGBA(浮点型或者unit8类型)

    # coding=utf-8
    
    from matplotlib import pyplot as plt
    X = [[1,2],[3,4],[5,6]]
    plt.imshow(X)
    plt.show()  

    运行结果:

    Colorbar:增加颜色类标的代码是plt.colorbar(),代码如下:

    #coding=utf-8  
    
    from matplotlib import pyplot as plt  
    X = [[1,2],[3,4],[5,6]]  
    plt.imshow(X)  
    plt.colorbar()
    plt.show()    

    运行结果:

    Colormap:参数cmap用于设置热图的Colormap。(参考百度百科)
    Colormap是MATLAB里面用来设定和获取当前色图的函数,可以设置如下色图:
        hot 从黑平滑过度到红、橙色和黄色的背景色,然后到白色。
        cool 包含青绿色和品红色的阴影色。从青绿色平滑变化到品红色。
        gray 返回线性灰度色图。
        bone 具有较高的蓝色成分的灰度色图。该色图用于对灰度图添加电子的视图。
        white 全白的单色色图。 
        spring 包含品红和黄的阴影颜色。
        summer 包含绿和黄的阴影颜色。
        autumn 从红色平滑变化到橙色,然后到黄色。 
        winter 包含蓝和绿的阴影色。

    下面这段代码是显示原图、灰度(gray)、和春夏秋冬的示例。

    #coding=utf-8  
    from matplotlib import pyplot as plt  
    X = [[1,2],[3,4]]   
    fig = plt.figure()
    ax = fig.add_subplot(231)
    ax.imshow(X)
    ax = fig.add_subplot(232)
    ax.imshow(X, cmap=plt.cm.gray) #灰度
    ax = fig.add_subplot(233)
    im = ax.imshow(X, cmap=plt.cm.spring) #
    plt.colorbar(im)                
    ax = fig.add_subplot(234)
    im = ax.imshow(X, cmap=plt.cm.summer)
    plt.colorbar(im, cax=None, ax=None, shrink=0.5) #长度为半
    ax = fig.add_subplot(235)
    im = ax.imshow(X, cmap=plt.cm.autumn)
    plt.colorbar(im, shrink=0.5, ticks=[-1,0,1])
    ax = fig.add_subplot(236)
    im = ax.imshow(X, cmap=plt.cm.winter)
    plt.colorbar(im, shrink=0.5)
    plt.show()
    View Code

    运行结果:

    通常图片都是由RGB组成,一块一块的,详见我的数字图像处理系列博客,这里想把某块显示成一种颜色,则需要调用interpolation='nearest'参数即可,代码如下:

    #coding=utf-8  
    from matplotlib import pyplot as plt  
    X = [[0, 0.25], [0.5, 0.75]]   
    fig = plt.figure()
    ax = fig.add_subplot(121)
    im = ax.imshow(X, cmap=plt.get_cmap('hot'))
    plt.colorbar(im, shrink=0.5)
    ax = fig.add_subplot(122)
    im = ax.imshow(X, cmap=plt.get_cmap('hot'), interpolation='nearest',
                   vmin=0, vmax=1) 
    plt.colorbar(im, shrink=0.2)
    plt.show()
    View Code

    运行结果:

     详细看文章:点击这里

    默认情况下,imshow将数据标准化为最小和最大值。 您可以使用vmin和vmax参数或norm参数来控制(如果您想要非线性缩放)。
    百度经验提供一段代码,也不错,推荐大家学习。
    注意:相当于在A~J和a~j的图像矩阵中,产生10*10的随机数,对矩阵进行颜色填充;只是在填充过程中,选择随机数的最大值和最小值进行标准化处理。

    # coding=utf-8
    import numpy as np
    from matplotlib import pyplot as plt
    from matplotlib import cm 
    from matplotlib import axes 
    def draw_heatmap(data,xlabels,ylabels):
        #cmap=cm.Blues    
        cmap=cm.get_cmap('rainbow',1000)
        figure=plt.figure(facecolor='w')
        ax=figure.add_subplot(1,1,1,position=[0.1,0.15,0.8,0.8])
        ax.set_yticks(range(len(ylabels)))
        ax.set_yticklabels(ylabels)
        ax.set_xticks(range(len(xlabels)))
        ax.set_xticklabels(xlabels)
        vmax=data[0][0]
        vmin=data[0][0]
        for i in data:
            for j in i:
                if j>vmax:
                    vmax=j
                if j<vmin:
                    vmin=j    map=ax.imshow(data,interpolation='nearest',cmap=cmap,aspect='auto',vmin=vmin,vmax=vmax)
    cb=plt.colorbar(mappable=map,cax=None,ax=None,shrink=0.5)
        plt.show()
    a=np.random.rand(10,10)
    print a
    xlabels=['A','B','C','D','E','F','G','H','I','J']
    ylabels=['a','b','c','d','e','f','g','h','i','j']
    draw_heatmap(a,xlabels,ylabels)  
    View Code

     下面介绍plt.subplot(),参考文章:点击这里

    plt.subplot(nrows, ncols, index, **kwargs)

    可以使用三个整数,或者三个独立的整数来描述子图的位置信息。如果三个整数是行数、列数和索引值,子图将分布在行列的索引位置上。索引从1开始,从右上角增加到右下角。

    位置是由三个整型数值构成,第一个代表行数,第二个代表列数,第三个代表索引位置。例如:plt.subplot(2, 3, 5) 和 plt.subplot(235) 是一样一样的。需要注意的是所有的数字不能超过10。

    例如以下代码:

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(1, 2, 2)
    y1 = np.sin(x)
    
    y2 = np.cos(x)
    
    ax1 = plt.subplot(2, 2, 1, frameon = False) # 两行一列,位置是1的子图
    plt.plot(x, y1, 'b--')
    plt.ylabel('y1')
    ax2 = plt.subplot(2, 2, 2, projection = 'polar')
    plt.plot(x, y2, 'r--')
    plt.ylabel('y2')
    plt.xlabel('x')
    plt.subplot(2, 2, 3, sharex = ax1, facecolor = 'red')
    plt.plot(x, y2, 'r--')
    plt.ylabel('y2')
    
    plt.show()
    View Code

     可见,函数依次画出三个图。总结:使用subplot优点是简单明了,缺点是有点麻烦

  • 相关阅读:
    Java中splite的用法与小技巧
    android asmack调用MultiUserChat.getHostedRooms方法出现空指针的异常解决方案
    android java.lang.ExceptionInInitializerError
    二维码生成与返回客户端
    微信查询所有关注该公众号的用户
    连接数据库报错:句柄无效
    httpclient POST请求(urlencoded)
    小程序——获得用户敏感信息
    作用域浅析
    小程序开发——统一请求方法
  • 原文地址:https://www.cnblogs.com/2020zxc/p/13369178.html
Copyright © 2011-2022 走看看