matplotlib基础库使用

#
 
matplotlib.pyplot的画图设置函数,以下函数的每一个设置项直接对应图上的一个位置
 
图的title(标题)设置
matplotlib.pyplot.title(label, fontdict=None, loc='center', pad=None, **kwargs)
label:  title(标题)显示的内容,比如说,改坐标图标识车子的时间速度关系图
fontdict: 字典内容,用于控制title显示的样式, 通常使用默认值,以下是其默认值
        {
            'fontsize': rcParams['axes.titlesize'],
            'fontweight' : rcParams['axes.titleweight'],
            'verticalalignment': 'baseline',
            'horizontalalignment': loc
        }
loc: 控制title显示的位置,可选择的值:{'center', 'left', 'right'}
     默认值为center
pad:
kwargs:一般我们使用class matplotlib.text.Text支持的属性参数设置title的样式,
       具体参见该类的valid  kwargs , fontdict是从其中抽取的部分设置参数
返回值类型: class matplotlib.text.Text
示例一
    import matplotlib.pyplot as plt
    #图形输入值
    input_values = [1,2,3,4,5]
    #图形输出值
    squares = [1,4,9,16,25]
    #plot根据列表绘制出有意义的图形,linewidth是图形线宽,可省略
    plt.plot(input_values,squares,linewidth=5)
    #设置图标标题
    plt.title("Square Numbers",fontsize = 24, color ="red" )
    #设置坐标轴标签
    plt.xlabel("Value",fontsize = 14 )
    plt.ylabel("Square of Value",fontsize = 14)
    #设置刻度标记的大小
    plt.tick_params(axis='both',labelsize = 14)
    #打开matplotlib查看器,并显示绘制图形
    plt.show()
 
x,y轴意义说明
matplotlib.pyplot.xlabel(xlabel, fontdict=None, labelpad=None, **kwargs)
xlabel: x axis label  x轴显示的内容,x,y轴的标签说明,比如标识时间,速度
fontdict:
labelpad: 设置x轴显示的内容与x轴之间的距离
kwargs:一般我们使用class matplotlib.text.Text支持的属性参数设置xlabel的样式,
       具体参见该类的valid  kwargs , fontdict是从其中抽取的部分设置参数
 
matplotlib.pyplot.ylabel(ylabel, fontdict=None, labelpad=None, **kwargs)
使用方法同上
 
刻度尺比例定义
matplotlib.pyplot.xscale(value, **kwargs)
常规的刻度尺之间比例是一比一,但是log函数是10倍关系,。。。这个函数定义刻度尺之间的比例
value : {"linear", "log", "symlog", "logit", ...}
        用于设置x轴的样式,比如线性轴表示,轴上每一个点之间距离相等,log表示采用log函数
        的梯度,等距离点之间是10倍关系 , 等等
kwargs:
        matplotlib.scale.LinearScale等类型的设置参数,具体可以参照各类
        除了包提供的四种类型以外,用户还可以自定义类型
 
matplotlib.pyplot.yscale(value, **kwargs)
使用方法同上
 
刻度尺和刻度定义
matplotlib.pyplot.xticks(ticks=None, labels=None, **kwargs)
x轴上,每一个坐标点的意义和位置
ticks: x轴上的坐标位置,该位置可用于放置自定义字符串,若无直接放置x轴的坐标数;
       若为空,则不显示x轴坐标刻度
labels:自定义的坐标字符串,放置的位置由ticks参数决定,可选
kwargs:一般我们使用class matplotlib.text.Text支持的属性参数设置label的样式,
       具体参见该类的valid  kwargs
返回值类型: 坐标数组  和 class matplotlib.text.Text
示例一
    import numpy as np
    from matplotlib import pyplot as plt
    x = np.arange(0, 2*np.pi, 0.01)
    y = np.sin(x)
    plt.plot(x,y)
    plt.xticks( np.arange(0,2*np.pi,0.5) )
    plt.yticks( [-1, -0.5, 0, 0.5, 1] )
    plt.show()
示例二
注:示例在linux下,中文显示可能会出问题
    import numpy as np
    from matplotlib import pyplot as plt
    x = np.arange(0, 2*np.pi, 0.01)
    y = np.sin(x)
    plt.plot(x,y)
    plt.xticks( np.arange(0,2*np.pi,0.5) )
    plt.yticks( [-1, -0.5, 0, 0.5, 1] , [ '负1','负0.5', '0', '+0.5', '+1' ], fontproperties="STKAITI")
    plt.show()
 
matplotlib.pyplot.yticks(ticks=None, labels=None, **kwargs)
使用方法同上
 
设置x轴的显示范围
matplotlib.pyplot.xlim(*args, **kwargs)
输入数据的x轴数据很多时,可以使用这个限制显示一部分
用于设置或者获取x轴的显示范围,使用方式如下
    left, right = xlim()
    xlim((left, right))
    left  x轴的最左边,right x轴的最右边
    也可以使用单起点,会自动推算另一个
    xlim(right=3)
示例一
    import matplotlib.pyplot as plt
    import numpy as np
    t = np.arange(0.01, 5.0, 0.01)
    s = np.exp(-t)
    plt.plot(t, s)
    plt.xlim(5, 0)  # decreasing time
    plt.xlabel('decreasing time (s)')
    plt.ylabel('voltage (mV)')
    plt.title('Should be growing...')
    #显示背景栅格
    plt.grid(True)
    plt.show()
 
matplotlib.pyplot.ylim(*args, **kwargs)
使用方法同上
 
 
 
 
 
 
画图函数
matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)
画图函数,该函数用于设定plt画图的样式,如曲线图,散点图,直方图,颜色,描点方式,等等
使用方式如下:
    plot([x], y, [fmt], data=None, **kwargs)
    plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
曲线(图)上的点由x,y决定, fmt是曲线画制的格式,
当x不存在时,x的值默认为0,1,2....n-1,n为y的长度
第二种方式,可以在一个xoy平面上画制多个图形
fmt格式:
    fmt = '[color][marker][line]'
kwargs: class matplotlib.lines.Line2D的属性,fmt是一个简单的画图属性设置,
        使用该类可以更细致的设置各种参数,如果两者之间出现冲突,以这里的为主
返回值类型:class matplotlib.lines.Line2D对象
         它的属性,准确表达了点的位置,图形绘制样式等
 
Colors   每一个x,y坐标的颜色,单独使用颜色时,也可以使用对应的三基色十六进制数
    'b'     blue
    'g'     green
    'r'     red
    'c'     cyan
    'm'     magenta
    'y'     yellow
    'k'     black
    'w'     white
Markers  每一个xy坐标的表示方式,如:点,圆圈,向上的三角,四角形等
    '.'     point marker
    ','     pixel marker
    'o'     circle marker
    'v'     triangle_down marker
    '^'     triangle_up marker
    '<'     triangle_left marker
    '>'     triangle_right marker
    '1'     tri_down marker
    '2'     tri_up marker
    '3'     tri_left marker
    '4'     tri_right marker
    's'     square marker
    'p'     pentagon marker
    '*'     star marker
    'h'     hexagon1 marker
    'H'     hexagon2 marker
    '+'     plus marker
    'x'     x marker
    'D'     diamond marker
    'd'     thin_diamond marker
    '|'     vline marker
    '_'     hline marker
 
Line :线图,线段图等
    '-'     solid line style
    '--'     dashed line style
    '-.'     dash-dot line style
    ':'     dotted line style
 
返回值类型: class matplotlib.lines.Line2D(....)
其它可选参数:class matplotlib.lines.Line2D
 
 
示例一
    import matplotlib.pyplot as plt
    plt.plot([1,2,3,4], [1,4,9,16], 'ro')
    plt.axis([0, 6, 0, 20])
    plt.show()
示例二
    import numpy as np
    import matplotlib.pyplot as plt
    t = np.arange(0., 5., 0.2)
    plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
    plt.show()
示例三
    import numpy as np
    import matplotlib.pyplot as plt
    t = np.arange(0., 5., 0.2)
    plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^', color="yellow")
    plt.show()
    示例二红蓝绿三色散点图,示例三已经全部改成了黄色
 
样式说明图(每一个图样的代表意义)
matplotlib.pyplot.legend(*args, **kwargs)
使用方式如下:
    legend()
    legend(labels)
    legend(handles, labels)
第一种方式会自动检测legend的样式,legend的样式可以从所有artist子类中获取,常用的子类比如:
class matplotlib.lines.Line2D, class matplotlib.patches.Patch 等
第二种方式将样式名和样式之间隐式关联,该方式不推荐使用
第三种方式将样式和样式名完美对接,推荐使用的方案
kwargs:legend有很多自己定义的参数,如样式图的位置loc
 
loc:定义样式图的位置,支持字符串和数字两种模式
Location String     Location Code
'best'                 0
'upper right'         1
'upper left'         2
'lower left'         3
'lower right'         4
'right'             5
'center left'         6
'center right'         7
'lower center'         8
'upper center'         9
'center'             10
 
 
示例一:
    import numpy as np
    import matplotlib.pyplot as plt
    plt.plot([1, 2, 3], color="red", label='Inline label')
    plt.legend()
    plt.show()
    如上示例会自动推断legend的样式
示例二
    import numpy as np
    import matplotlib.pyplot as plt
    t = np.arange(0., 5., 0.2)
    plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
    plt.legend(["red", "blue", "green"])
    plt.show()
    如上所示,每条线对应一个名字,但名字是写在legend中的,因为所有线的名字不可能一样。
 
画布设置
matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, clear=False, **kwargs)
所有图形都是在画布上画的,如果需要画张图片,就需要多个画布(画布有上限设置)
该函数提供了不同画布的引用方式,以及某一画布的大小,底色,分界线颜色等属性的设置
num:通常为整形数据,用于表示是那个画布,默认情况下,系统会自动分配,若为字符串则会自动变成title
    如果对应画布的id已经存在,则表示此figure是之前的画布引用
figsize:画布的大小
dpi :画布的像素点
facecolor:画布的非图形绘画区的颜色
 
示例一:
    import numpy as np
    import matplotlib.pyplot as plt
    plt.figure(figsize=(10.0,10.01), edgecolor='yellow', facecolor ='g')
    plt.plot([1, 2, 3], color="red", label='Inline label')
    plt.legend()
    plt.show()
示例二
    import matplotlib.pyplot as plt
    import numpy as np
 
    t = np.arange(0.0, 2.0, 0.01)
    s1 = np.sin(2*np.pi*t)
    s2 = np.sin(4*np.pi*t)
    plt.figure(1)
    plt.plot(t, s1)
 
    plt.figure(2)
    plt.plot(t, s2)
 
    plt.figure(1)
    plt.xlabel("lsl")
    plt.show()
    如上所示,使用两张画布,并在最后重新调用第一张画布,并给他添加属性
 
 
 
子区域
matplotlib.pyplot.subplot(*args, **kwargs)
该函数可用于在一个画布上,画出多个子图形
第一个参数可以是一个三位的整数,依次表示行数,列数和索引。该三位的整数,也可以拆分成三个参数
如下所示,效果一致
    fig.add_subplot(235)
    fig.add_subplot(2, 3, 5)
索引是从最上面的第一行,从左到右开始增长
 
在matplotlib中,整个图像为一个Figure对象(画布)。在Figure对象中可以包含一个或者多个Axes对象。
每个Axes(ax)对象都是一个拥有自己坐标系统的绘图区域.
 
nrows,ncols:
    子图的行列数。
 
sharex, sharey:
    设置为 True 或者 ‘all’ 时,所有子图共享 x 轴或者 y 轴,
    设置为 False or ‘none’ 时,所有子图的 x,y 轴均为独立,
    设置为 ‘row’ 时,每一行的子图会共享 x 或者 y 轴,
    设置为 ‘col’ 时,每一列的子图会共享 x 或者 y 轴。
 
squeeze:
    默认为 True,是设置返回的子图对象的数组格式。
    当为 False 时,不论返回的子图是只有一个还是只有一行,都会用二维数组格式返回他的对象。
    当为 True 时,如果设置的子图是(nrows=ncols=1),即子图只有一个,则返回的子图对象是一个标量的形式,如果子图有(N×1)或者(1×N)个,则返回的子图对象是一个一维数组的格式,如果是(N×M)则是返回二位格式。
 
subplot_kw:
    字典格式,传递给 add_subplot() ,用于创建子图。
 
gridspec_kw:
    字典格式,传递给 GridSpec 的构造函数,用于创建子图所摆放的网格。
    class matplotlib.gridspec.GridSpec(nrows, ncols, figure=None, left=None, bottom=None, right=None, top=None, wspace=None, hspace=None, width_ratios=None, height_ratios=None)
    如,设置 gridspec_kw={'height_ratios': [3, 1]} 则子图在列上的分布比例是3比1。
 
**fig_kw :
    所有其他关键字参数都传递给 figure()调用。
    如,设置 figsize=(21, 12) ,则设置了图像大小。
 
返回值:
        fig: matplotlib.figure.Figure 对象
        ax:子图对象( matplotlib.axes.Axes)或者是他的数组
 
示例一:
    import numpy as np
    import matplotlib.pyplot as plt
 
    t = np.arange(0.0, 1.0 + 0.01, 0.01)
    s = np.cos(2 * 2*np.pi * t)
    t[41:60] = np.nan
 
    plt.subplot(2, 1, 1)
    plt.plot(t, s, '-', lw=2)
 
    plt.xlabel('time (s)')
    plt.ylabel('voltage (mV)')
    plt.title('A sine wave with a gap of NaNs between 0.4 and 0.6')
    plt.grid(True)
 
    plt.subplot(2, 1, 2)
    t[0] = np.nan
    t[-1] = np.nan
    plt.plot(t, s, '-', lw=2)
    plt.title('Also with NaN in first and last point')
 
    plt.xlabel('time (s)')
    plt.ylabel('more nans')
    plt.grid(True)
    #同一画布上的子区域,在排布时可能存在互相之间距离太近,太远,重叠等现象,需要使用函数进行调整各自之间的距离
    plt.tight_layout()
    plt.show()
示例二:
    import numpy as np
    import matplotlib.pyplot as plt
    prng = np.random.RandomState(19680801)  # to ensure reproducibility
 
    fs = 1000
    t = np.linspace(0, 0.3, 301)
    A = np.array([2, 8]).reshape(-1, 1)
    f = np.array([150, 140]).reshape(-1, 1)
    xn = (A * np.exp(2j * np.pi * f * t)).sum(axis=0) + 5 * prng.randn(*t.shape)
 
    fig, (ax0, ax1) = plt.subplots(ncols=2)
    #ax0, ax1 = plt.subplots(ncols=2, constrained_layout=True)
 
    yticks = np.arange(-50, 30, 10)
    yrange = (yticks[0], yticks[-1])
    xticks = np.arange(-500, 550, 200)
 
    #功率谱密度图
    ax0.psd(xn, NFFT=301, Fs=fs,  pad_to=1024, scale_by_freq=True)
    ax0.set_title('Periodogram')
    ax0.set_yticks(yticks)
    ax0.set_xticks(xticks)
    #栅格显示
    ax0.grid(True)
    ax0.set_ylim(yrange)
 
    ax1.psd(xn, NFFT=150, Fs=fs, pad_to=512, noverlap=75, scale_by_freq=True)
    ax1.set_title('Welch')
    ax1.set_xticks(xticks)
    ax1.set_yticks(yticks)
    ax1.set_ylabel('')  # overwrite the y-label added by `psd`
    ax1.grid(True)
    ax1.set_ylim(yrange)
 
    plt.show()
 
posted @ 2021-03-07 23:13  dos_hello_world  阅读(175)  评论(0)    收藏  举报