• 数据分析库之matplotlib


    一、Matplotlib基础知识

    Matplotlib中的基本图表包括的元素

    • x轴和y轴 axis 水平和垂直的轴线

    • 轴标签 axisLabel 水平和垂直的轴标签

    • x轴和y轴刻度 tick 刻度标示坐标轴的分隔,包括最小刻度和最大刻度

    • x轴和y轴刻度标签 tick label 表示特定坐标轴的值

    • 绘图区域(坐标系) axes 实际绘图的区域

    • 画布 figure 呈现所有的坐标系

    figure>axes(坐标系)>axis(坐标轴)+tick+label+title
    最外面是 画布对象(里面可以有子画布也可以没有)
    画布里面有坐标系

    import numpy as np
    import pandas as pd
    from pandas import Series,DataFrame
    import matplotlib.pyplot as plt

    只含单一曲线的图

    x = np.arange(-np.pi,np.pi,0.1)
    y = np.sin(x)
    plt.plot(x,y)  # 绘图函数 默认绘制折线图

    包含多个曲线的图

    1、可以使用多个plot函数(推荐),在一个图中绘制多个曲线

    x1 = np.arange(-np.pi,0,0.1)
    plt.plot(x1,np.sin(x1))
    x2 = np.arange(0,np.pi,0.1)
    plt.plot(x2,np.sin(x2))

    2、也可以在一个plot函数中传入多对X,Y值,在一个图中绘制多个曲线

    x1 = np.arange(-np.pi,0,0.1)
    x2 = np.arange(0,np.pi,0.1)
    plt.plot(x1,np.sin(x1),x2,np.sin(x2))  # 也可以在一个plot函数中将多个 x和y的对应关系 连着写

    得到的结果与上图一致

    子画布

    axes = plt.subplot()

    x = np.arange(-np.pi,np.pi,0.1)
    axes1 = plt.subplot(2,2,1)# 参数1指的是把画布纵向分成几份 参数2指的是把画布横向分成几份 参数3指的是占用第几个(从1开始)
    axes2 = plt.subplot(2,2,3)
    axes3 = plt.subplot(2,2,3)
    axes4 = plt.subplot(2,2,4)
    axes1.plot(x,np.sin(x))  # 坐标系axes对象的plot方法 使用起来和之前的画布fig的plot方法一样
    axes2.plot(x,np.cos(x))
    axes3.plot(x,np.tan(x))
    axes4.plot(x,np.sin(x)/np.cos(x))
    # 如果subplot中指定的 坐标系 有重叠
    # 如果完全重叠 就花到同一个坐标系里面
    # 如果没有完全重叠 并且 位置上有冲突 后面的会把签名的覆盖

    网格线

    使用plt.grid方法可以开启网格线,使用plt面向对象的方法,创建多个子图显示不同网格线

    • axis显示轴向
    • color代表颜色
    • alpha表示线的明暗程度
    • lw代表linewidth,线的粗细
    plt.plot()
    plt.grid()  # 网格线
    axes1 = plt.subplot(4,4,1)
    axes2 = plt.subplot(4,4,6)
    axes3 = plt.subplot(4,4,11)
    axes4 = plt.subplot(4,4,16)
    # 给子画布中的图 添加网格线
    # plt.grid()  # 使用plt调用grid只会给最后一个子画布 添加网格线 (应该是让axes对象去调用)
    axes1.grid(axis='x')  # axis='both'指的是 x和y都会引出网格线
    axes2.grid(axis='y')
    axes3.grid(color='red',alpha=0.3,linewidth=5)
    # axes.grid()

    坐标轴的轴线

    plt.axis([xmin,xmax,ymin,ymax])

    # axes 坐标系
    # axis 轴线
    x = np.linspace(-1,1,100)
    y = (1-x**2)**0.5
    plt.plot(x,y)
    plt.plot(x,-y)
    # plt.axis([-5,2,-2,10])  # [xmin, xmax, ymin, ymax] 可以控制x和y的显示范围
    plt.axis([-1,1,-1,1])

    plt.axis('xxx') 'off'、'equal'……

    • 设置坐标轴类型
    • 关闭坐标轴
    x = np.linspace(-1,1,100)
    y = (1-x**2)**0.5
    plt.plot(x,y)
    plt.plot(x,-y)
    # plt.axis([-5,2,-2,10])  # [xmin, xmax, ymin, ymax] 可以控制x和y的显示范围
    plt.axis('equal')  # 让x和y的间距相等
    plt.axis('off')  # 去掉坐标轴线

    xlim方法和ylim方法

    • 除了plt.axis方法,还可以通过xlim,ylim方法设置坐标轴范围
    x = np.linspace(-1,1,100)
    y = (1-x**2)**0.5
    plt.figure(figsize=(5,5)) # 设置画布的大小
    plt.plot(x,y)
    plt.plot(x,-y)
    # plt.xlim((-2,2))  # x轴的取值范围
    # plt.ylim((-2,2))  # y轴的取值范围
    plt.axis([-5,5,-5,5])

    坐标轴的标签

    plt.xlabel( )方法 和 plt.ylabel( )方法
    例如 plt.ylabel('y = x^2 + 5',rotation = 60)

    • color 标签颜色
    • fontsize 字体大小
    • rotation 旋转角度
    x = np.arange(10)
    y = x**2+5
    plt.plot(x,y)
    # plt.xlabel('x_label')  # s string 字符串 必须传 x的标题
    # plt.ylabel('y=x^2+5')
    # plt.ylabel('y=x^2+5',color='r',fontsize=20,rotation=45)  # color颜色 fontsize字号 rotation旋转
    plt.xlabel('x_label',color='r',fontsize=20,rotation=45)
    plt.ylabel('y=x^2+5',color='r',fontsize=20,rotation=90,alpha=0.5)  # y默认就是90度

    画布的标题

    plt.title()方法

    • loc 标题位置{left,center,right}
    • color 标题颜色
    • fontsize 字体大小
    • rotation 旋转角度
    x = np.arange(10)
    plt.plot(x,x)
    # plt.title('title') plt.title('标题',fontproperties='KaiTi',fontsize=20,color='red',alpha=0.3,rotation=45,loc='right') # 建议平时就使用英文 很多地方对中文支持都不好

    图例

    legend方法

    两种传参方法:

    • 分别在plt.plot( )函数中增加label参数,再调用plt.legend( )方法显示
    • 直接在legend方法中传入字符串列表 如:plt.legend(['normal','fast','slow'])
    x = np.arange(10)
    plt.plot(x,x)
    plt.plot(x,2*x)
    plt.plot(x,x/2)
    plt.legend(['normal','fast','slow'])  # 列表中的顺序 要和上面画线的顺序一样

    plt.plot(x,x,label='normal')
    plt.plot(x,2*x,label='fast')
    plt.plot(x,x/2,label='slow')
    plt.legend()

    loc参数

    • loc参数用于设置图例的位置,一般在legend函数内
    • matplotlib已经预定义好几种数字表示的位置

    loc参数还可以是2元素的列表,表示图例左下角的坐标

    • [0,0] 左下
    • [0,1] 左上
    • [1,0] 右下
    • [1,1] 右上

    图例也可以超过图的界限loc = (-0.1,0.9)

    data = np.random.randint(0,100,size=(10,3))
    df = DataFrame(data,columns=list('ABC'))
    df
    plt.plot(df['A'])
    plt.plot(df['B'])
    plt.plot(df['C'])
    # plt.legend(['A','B','C'],loc=10)  # 如果不设置 loc参数 默认 loc=0 best 寻找空间最大的最佳位置
    # loc的值 除了 可以使用 预定义的0-10 之外 开可以以座标的形式 设置位置
    # plt.legend(['A','B','C'],loc=[0,0])
    # plt.legend(['A','B','C'],loc=[1,1])
    # plt.legend(['A','B','C'],loc=[-0.5,1.5])

    ncol参数

    ncol控制图例中有几列,在legend中设置ncol,需要设置loc

    data = np.random.randint(0,100,size=(10,3))
    df = DataFrame(data,columns=list('ABC'))
    df
    plt.plot(df['A'])
    plt.plot(df['B'])
    plt.plot(df['C'])
    plt.legend(['A','B','C'],ncol=3)   # ncol 用来指定有几列

    二、设置plot的风格和样式

    plot语句中支持除X,Y以外的参数,以字符串形式存在,来控制颜色、线型、点型等要素,语法形式为:
    plt.plot(X, Y, 'format', ...)

    点和线的样式

    颜色

    • 参数color或c
    • 颜色值的方式
      • 合法的HTML颜色名
        • color = 'red'
      • 别名
        • color='r'
      • HTML十六进制字符串
        • color = '#eeefff'
      • 归一化到[0, 1]的RGB元组
        • color = (0.3, 0.3, 0.4)

    x = np.linspace(-np.pi,np.pi,100)
    y = np.sinh(x)
    # plt.plot(x,y,color='red')  # color属性 设置线的颜色 后面的值是字符串 可以跟 
    # plt.plot(x,y,c='red')  # 参数名可以简写成c
    # plt.plot(x,y,c='b')  # 参数值也可以简写  rgb光源的三原色(加光模式) cmy(减光模式)k(黑色) w白色
    # plt.plot(x,y,c='#abcdef')
    plt.plot(x,y,c=(0.5,0.4,0.1))

    透明度

    plt.plot() 中的 alpha参数

    plt.plot(x,y,c=(0.5,0.4,0.1),alpha=0.2)

    线型和线宽

    • 参数linestyle或ls
    • linewidth或lw参数

    x = np.linspace(0,10,11)
    x
    y = x
    plt.plot(x,y,c='orange',ls='steps',dashes=[2,4,6,8],alpha=0.8)

    点型

    • marker 设置点形
    • markersize 设置点形大小

    更多点和线的设置

    • markeredgecolor = 'green',
    • markeredgewidth = 2,
    • markerfacecolor = 'purple'

    同时设置多个曲线样式

    多个曲线同一设置

    plt.plot(x1, y1, x2, y2,...,样式参数)

    plt.plot(x,x,x,2*x,x,x/2,color='r',ls=':',marker='.')  # x1 y1  x2 y2  x3 y3
    # 多对曲线 样式一样 可以 在最后 统一设置

    多个曲线不同设置

    多个都进行设置时,多参数连用

    plt.plot(x1, y1, fmt1, x2, y2, fmt2, ...) fmt format 格式化字符串

    fmt = '[color][marker][line]'

    plt.plot(x,x,'ro-',x,2*x,'b*:',x,x/2,'yd--') # fmt format 格式化字符串
    # fmt = '[color][marker][line]'

     

    文档 https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html#matplotlib.pyplot.plot

    曲线样式的三种设置方式

    向方法传入关键字参数

    plt.plot(...)

    就是之前我们一直用的 调用plt.plot()绘图的时候往里面传参数的方式
    优点:简洁方便

    缺点:容易乱 没提示 可读性差

    对实例使用一系列的setter方法

    • plt.plot()方法返回一个包含所有线的列表,设置每一个线需要获取该线对象
      • eg: lines = plt.plot(); line = lines[0]
      • line.set_linewidth()
      • line.set_linestyle()
      • line.set_color()
    lines = plt.plot(x,x,x,2*x,x,x/2)
    lines[0].set_linestyle('--')
    lines[1].set_linewidth(5)
    lines[2].set_color('cyan')

    对坐标系使用一系列的setter方法

    • axes = plt.subplot()获取坐标系
    • axes.plot(...)
    axes = plt.subplot()
    lines = axes.plot(x,x,x,2*x,x,x/2)
    lines[0].set_linestyle('--')
    lines[1].set_linewidth(5)
    lines[2].set_color('cyan')

    axes对象文档 https://matplotlib.org/api/axes_api.html

    lines对象文档 https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D

    X、Y轴坐标刻度

    plt.xticks()和plt.yticks()方法

    • 需指定刻度值和刻度名称 plt.xticks([刻度列表],[名称列表])
    • 支持fontsize、rotation、color等参数设置
    x = np.linspace(-np.pi,np.pi,100)
    x
    y = np.sin(x)
    plt.plot(x,y)
    # plt.xticks([-3,0,3])  # 以列表的形式传入要显示的刻度
    # plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],['-$pi$','-$pi$/2',0,'$pi$/2','$pi$'])  # 第二个列表 可以传 要显示的名字
    plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],['-$pi$','-$pi$/2',0,'$pi$/2','$pi$'],fontsize=20,color='r',rotation=45)
    plt.yticks([1,0.5,0,-0.5,-1],['max',0.5,0,-0.5,'min'])
    plt.grid()

    axes = plt.subplot(111)
    axes.plot(x,y)
    # axes.set_xticks([-3,0,3],['min',0,'max'])  # set_xticks只能设置显示哪些刻度 不能设置自定义名称
    axes.set_xticks([-3,0,3])
    axes.set_xticklabels(['min',0,'max'])  # 用这个可以设置 自定义名称

    # 保存图片
    fig = plt.figure()
    x = np.linspace(0,99,100)
    x
    plt.plot(x)
    plt.plot(x.cumsum())
    # fname filename 文件名 用来指定要保存在哪里 不指定后缀默认是png图片 还可以是pdf svg
    # dpi dot per inch 清晰度
    # facecolor图片的背景颜色
    fig.savefig('demo.png',dpi=100,facecolor='c')  # 保存图像
     
  • 相关阅读:
    python
    spice-vdagent
    no ia32-libs
    git conflict
    wget mirror
    docker !veth
    libprotobuff8.so not found
    angular 列表渲染机制
    Java测试技巧
    react组件生命周期
  • 原文地址:https://www.cnblogs.com/louyifei0824/p/9951674.html
Copyright © 2020-2023  润新知