• matplotlib绘制图表


    快速绘图:

    1.matplotlib中的pylab模块,包含了许多numpy和pyplot中常用的函数,方便快速计算和绘图,可以用于IPython中快速交互使用。

    2.调用figure创建绘图对象,也可以不创建绘图对象直接调用plot函数直接绘图,matplotlib会自动创建一个绘图对象。

    3.绘制多副图表的话,可以给figure传递一个整数参数指定图标序号。

    4.

    • figsize参数指定绘图对象的宽度和高度
    • dpi参数指定绘图对象的分辨率,缺省值为80

    5.

    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.linspace(0, 10, 1000)
    y = np.sin(x)
    z = np.cos(x**2)
    
    plt.figure(figsize=(8,4))
    plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
    plt.plot(x,z,"b--",label="$cos(x^2)$")
    plt.xlabel("Time(s)")
    plt.ylabel("Volt")
    plt.title("PyPlot First Example")
    plt.ylim(-1.2,1.2)
    plt.legend()
    plt.show()

    np.linspace():

    linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

    • start: 队列的开始值。
    • stop: 队列结束值。当‘endpoint=False’时,不包含该点。当‘endpoint=False’时,步长会发生改变。
    • num: 生成的样本数,默认是50。
    • endpoint: 如果是True,‘stop’是最后样本。
    • retstep: 如果是True, return('samples', 'step')。
    • samples: 在闭区间[start, stop]或者半开区间[start, stop)中num个等间距的样本
    • step: 仅仅当'retstep=True'时返回样本间距大小。

    plt.plot(x,y,label='$sin(x)$',color='red',linewidth=2)
    plt.plot(x,z,'b--',label='$cos(x^2)$')

    plot调用方式很灵活,

    (1). 第一句将x,y数组传递给plot,用关键字指定plot属性

    • label:绘制曲线的名字,此名字在图示(legend)中显示。在字符串前后加上'$',就会使用内嵌的latex引擎绘制的数学公式。
    • color:曲线颜色
    • linewidth:曲线宽度

    (2). 第二句通过参数'b--'指定曲线颜色和线型,b表示蓝色,‘--’表示虚线。在IPython中输入“plt.plot?”查看格式化字符串的详细配置。

    设置绘图对象属性

    plt.xlabel('Time(s)')
    plt.ylabel('Volt')
    plt.title('PyPlot First Example')
    plt.ylim(-1.2, 1.2)
    plt.legend()
    • xlabel:设置X轴的文字
    • ylabel:设置Y轴的文字
    • title:设置图表标题
    • xlim:设置X轴的范围
    • ylim:设置Y轴的范围
    • legend:显示图片

    最后调用plt.show()显示我们创建的绘图对象

    配置属性:

    1.通过调用Line2D(二维图)对象的set_*或者pyplot的属性设置函数setp设置其属性值。

    >>>import numpy as np
    >>>import matplotlib.pyplot as plt
    >>>x = np.arange(0,5,0.1)
    >>>line = plt.plot(x, x*x)             # plot返回一个列表,通过line,获取其中一个元素
    >>>line.set_antialiased(False)         # 调用Line2D对象的set_*方法设置属性值
    >>>lines = plt.plot(x, np.sin(x), x, np.cos(x))           # 同时绘制sin和cos两条曲线,lines是有两个Line2D对象的列表
    >>>plt.setp(lines, color='r', linewidth=2.0)              # 调用setp函数同时配置多个Line2D对象的多个属性

     set_antialiased(False)关闭反锯齿效果

    2.通过调用Line2D(二维图)对象的get_*方法或者pyplot的属性设置函数getp获取其属性值。

    >>>line.get_linewidth()
    1.0
    >>>plt.getp(lines[0], 'color')        # 返回color属性
    'r'
    >>>plt.getp(lines[1])                 # 返回全部属性
    alpha = 1.0
    animated = False
    antialiased or aa = True
    axes = Axes(0.125,0.1;0.775x0.8)
    ... ...

    注意getp()只能对一个对象进行操作,它有两种方法:

    • 指定属性名:返回对象的指定属性的值
    • 不指定属性名:打印出对象的所有属性和值

    3.通过plt.gcf()获取当前的绘图对象:gcf是 get complete figure的缩写

    >>>f = plt.gcf()
    >>>plt.getp(f)
    alpha = 1.0
    animated = False
    antialiased or aa = True
    axes = Axes(0.125,0.1;0.775x0.8)
    ... ...

    4.figure对象的axes属性,其值为AxesSubplot对象(即子图)的列表,通过plt.gca()获得:gca是 get complete axes的缩写

    >>> plt.getp(f, "axes")
    [<matplotlib.axes.AxesSubplot object at 0x05CDD170>]
    >>> plt.gca()
    <matplotlib.axes.AxesSubplot object at 0x05CDD170>

    5.用plt.getp可以发现AxesSubplot对象有很多属性,例如它的lines属性为此子图所包括的 Line2D 对象列表:

    >>> alllines = plt.getp(plt.gca(), "lines")
    >>> alllines
    <a list of 3 Line2D objects>
    >>> alllines[0] == line        # 其中的第一条曲线就是最开始绘制的那条曲线
    True

    通过这种方法我们可以很容易地查看对象的属性和属性之间的包含关系,找到需要配置的属性。

    绘制多轴图:

    1.一个绘图对象(figure)可以包含多个轴(axis),即多个子图。

    2.subplot():

    subplot(numRows, numCols, plotNum)

     注意:比如参数349的意思是:将画布分割成3行4列,图像画在从左到右从上到下的第9块,那第十块怎么办,3410是不行的,可以用另一种方式(3,4,10)。

    plt.subplot(221) # 第一行的左图
    plt.subplot(222) # 第一行的右图
    plt.subplot(212) # 第二整行
    plt.show()

    3.axisbg参数给每个轴设置不同的背景色。(axisbg: axis background)

    4.当绘图对象中有多个轴的时候,可以通过工具栏中的Configure Subplots按钮,交互式地调节轴之间的间距和轴与边框之间的距离。如果希望在程序中调节的话,可以调用subplots_adjust函数,它有left, right, bottom, top, wspace, hspace等几个关键字参数,这些参数的值都是0到1之间的小数,它们是以绘图区域的宽高为1进行正规化之后的坐标或者长度。(configure:安装, adjust:调节)

    绘制散列图scatter()

    使用plot()绘图时,如果指定样式参数为仅绘制数据点,那么所绘制的就是一幅散列图。但是这种方法所绘制的点无法单独指定颜色和大小。

    scatter()绘制的散列图可以指定每个点的颜色和大小。

    scatter()的前两个参数是数组,分别指定每个点的x轴和y轴的坐标。

    s参数指定点的大小,值和点的面积成正比。它可以是一个数,指定所有点的大小;也可以是数组,分别对每个点指定大小。

    c参数指定点的颜色,可以是数值或数组。这里使用一维数组为每个点制定一个数值。通过颜色映射表,每个数值都会与一个颜色相对应。默认的颜色映射表中蓝色与最小值对应,红色与最大值对应。当c参数是形状为(N,3)或(N,4)的二维数组时,则直接表示每个点的RGB颜色。

    marker参数设置点的形状,可以是个表示形状的字符串,也可以是表示多边形的两个元素数组,第一个元素表示多边形的边数,第二个元素表示多边形的样式,取值范围为0、1、2、3。0表示多边形,1表示星形,2表示放射形,3表示忽略边数而显示为圆形。

    alpha参数设置点的透明度。

    lw参数设置线宽,lw是line width的缩写。

    facecolors参数为"none"时,表示散列点没有填充色。

    import numpy as np 
    import matplotlib.pyplot as plt
    
    N = 50
    x = np.random.rand(N)
    y = np.random.rand(N)
    area = np.pi * (15 * np.random.rand(N)) ** 2      # 0 to 15 point radiuses
    color = 2 * np.pi * np.random.rand(N)
    plt.scatter(x, y, s=area, c=color, alpha=0.5, cmap=plt.cm.hsv)
    plt.show()

    输出结果:

    matplotlib绘制散点图给点加上注释:

    plt.scatter(data_arr[:, 0], data_arr[:, 1], c=class_labels)
    for i, class_label in enumerate(class_labels):
      plt.annotate(class_label, (data_arr[:, 0][i], data_arr[:, 1][i]))
  • 相关阅读:
    zookeeper.Net
    转码和解码
    Node.js开发Web后台服务
    SQL Server 2012 读写分离设置
    使用C# 和Consul进行分布式系统协调
    http2
    .net core 2.1.3可能引发Could not load file or assembly XXXXX的错误
    jquery on函数和prop与attr区别
    html页面中完成查找功能
    C#匿名参数(转载too)
  • 原文地址:https://www.cnblogs.com/keye/p/7685169.html
Copyright © 2020-2023  润新知