美文网首页
数据分析-03

数据分析-03

作者: 博士伦2014 | 来源:发表于2018-10-14 15:41 被阅读0次

    第三神器matplotlib库

    1. 图片读取

    pyplot.imread(path)
    path指定图片地址
    返回数组,彩图是三维数组,灰度图是二维数组
    pyplot.imshow(image)
    image指定要展示的图片
    pyplot.show()
    展示图片

    2. 绘图

    导入:import matplotlib.pyplot as plt

    2.1 单图

    plt.plot(x, y)

    2.2 多图

    plt.plot(x1, np.sin(x1))
    plt.plot(x2, np.sin(x2))
    plt.plot(x1, np.sin(x1), x2, np.sin(x2))

    2.3 子画布

    plt.figure(figsize=(4,4))指定画布大小
    # 创建一个子画布,把原来的上下分成2,左右分成3,占用第三个

    axes1 = plt.subplot(2,2,1)
    axes2 = plt.subplot(2,2,2)
    axes3 = plt.subplot(2,2,3)
    axes4 = plt.subplot(2,2,4)
    

    使用子画布调用plot进行绘图

    2.4 网格线

    plt.grid(axis,color,linewidth,alpha)
    axis指定网格添加的轴线,默认是都添加
    color指定网格颜色
    linewidth指定线宽
    alpha指定透明度

    2.5 坐标轴线

    plt.axis(set)
    set指定轴线样式,equal|off
    plt.axis([-2, 2, -2, 2]) # [x起,x末,y起,y末]

    2.6 坐标轴标签

    plt.xlabel | ylabel(name, color, fonsize,rotation)
    name指定轴线名字
    color指定颜色
    fonsize字体大小
    rotation指定旋转角度,默认90°

    2.7 画布标题

    plt.title('sin(x)', loc='left', color='blue', fontsize=20, rotation=20)

    2.8 图例
    • 在plt.plot()里添加label属性,然后调用plt.legend()方法
      plt.plot(x,x/2,label='slow')
      plt.legend()
    • 直接在pltlegend()传入列表,指定对应图例
      plt.plot(x,x)
      plt.plot(x,2*x)
      plt.plot(x,x/2)
      plt.legend(['normal','fast','slow'])
      loc指定图例位置,默认在右上方
      ncol控制图例的列数
    2.9 轴线刻度

    plt.xticks()和plt.yticks()方法
    需指定刻度值和刻度名称 plt.xticks([刻度列表],[名称列表])
    支持fontsize、rotation、color等参数设置

    2.10 风格样式plt.plot()
    • 颜色
      合法的HTML颜色名: color = 'red'
      别名:color='r'
      HTML十六进制字符串:color = '#eeefff'
      归一化到[0, 1]的RGB元组:color = (0.3, 0.3, 0.4)

    • 透明度
      alpha=0.8

    • 背景色
      plt.subplot(facecolor='gray')

    • 线型
      plt.plot(x,x,linestyle='--',linewidth=5)
      plt.plot(x,x,ls='--',lw=5)
      '-' 实线 ':' 虚线
      '--' 破折线 'steps' 阶梯线
      '-.' 点划线 'None' / ',' 什么都不画

      • 自定义破折线间距
        plt.plot(x,y,dashes=[2,4,3,5,10,5])
    • 线型

      • marker设置点型


        marker设置点型
    plt.plot(x,y,
    marker='h',              # 设置点型
    markersize=20,           # 设置点型大小
    markeredgecolor='red',   # 点型边线颜色
    markeredgewidth=5,       #  边线宽度
    markerfacecolor='green') #点型填充色
    
    • 相同样式的多曲线
      plt.plot(x,x,x,2*x,x,x/2,c='r',marker='*',ls=':')
    • 不同样式的多曲线
      plt.plot(x,x,'ro:',x,2*x,'k*--',x,x/2,'c1-.')
    2.11 不同风格设置方式
    • 方式一:传统方式,上述
    • 方式二:子画布setter
      axes = plt.subplot()获取坐标系
      set_title()
      set_facecolor()
      set_xticks、set_yticks 设置刻度值
      set_xticklabels、set_yticklabels 设置刻度名称
    • 方式三:面向对象
      plt.plot()方法返回一个包含所有线的列表,设置每一个线需要获取该线对象
      lines = plt.plot(); line = lines[0]
      line.set_linewith()
      line.set_linestyle()
      line.set_color()

    3. 颜色映射

    from matplotlib.colors import ListedColormap
    cmap0 = ListedColormap(['red','green','blue'])

    4. 2D图像

    • 直方图
      plt.hist(x, bins=None, density=None, orientation='vertical', color=None)
      plt.hist:(data,bins=5,density=True,color='red',orientation='horizontal')
      x:指定传入的数据
      bins:将样本分成几个区间
      color:指定颜色
      density:切换占比显示
      orientation:指定直方图的方向样式

    • 条形图
      bar(x, height, width, bottom, *, align='center', **kwargs)
      plt.bar(x=index,height=data,width=0.5)
      x:指定索引
      height:指定数据
      width:条形宽度
      barh(y, width, height, left, *, align='center', **kwargs)
      plt.barh(y=index,height=0.5,width=data)
      y:指定索引
      width:指定数据
      height:指定条形宽度

    • 极坐标图
      plt.axes(polar=True)

    • 饼图
      plt.pie(x,
      labels=None, labels参数设置每一块的标签;
      labeldistance=1.1, labeldistance参数设置标签距离圆心的距离(比例值,只能设置一个浮点小数)
      autopct=None,autopct参数设置比例值的显示格式(%1.1f%%);
      pctdistance=0.6, pctdistance参数设置比例值文字距离圆心的距离
      explode=None, explode参数设置每一块顶点距圆形的长度(比例值,列表);
      colors=None,colors参数设置每一块的颜色(列表);
      shadow=False,shadow参数为布尔值,设置是否绘制阴影
      startangle=None) startangle参数设置饼图起始角度

    plt.pie(data, labels=['1','2','3','4'], labeldistance=0.5, autopct='%1.1f%%', pctdistance=0.8, explode=[0.2,0,0,0], colors=['red','green','blue','orange'], shadow=True, startangle=90)

    • 散点图
      plt.scatter(x, y, s=None, c=None, marker=None,alpha=None)
      plt.scatter(x,y,s=size,c=color,marker='o',alpha=0.8)
      x指定点的x坐标
      y指定点的y坐标
      s指定点的大小
      c指定点的颜色
      marker指定点型
      alpha透明度

    5. 图形内饰

    • 文字
      • 标题: plt.suptitle('suptitle')
      • 子标题:axes.set_title('axes title')
      • 图形内文字:axes.text(0.2,0.8,'axes text') ----指定出现的点及文字
    • 注释
      plt.annotate(s='this is very important',xy=[6,4],xytext=[5,5],arrowprops={'arrowstyle':'->'}
      • s注释内容
      • xy指定说明点
      • xytext指定注释内容位置
      • arrowprops设置箭头形式
        字典的形式传入
        width参数设置箭头长方形部分的宽度
        headlength参数设置箭头尖端的长度,
        headwidth参数设置箭头尖端底部的宽度
        shrink参数设置箭头顶点、尾部与指示点、注释文字的距离(比例值),可以理解为控制箭头的长度

    6. 3D图

    导入:from mpl_toolkits.mplot3d.axes3d import Axes3D

    • 曲面图
      思路:构建X,Y,Z坐标,切割X,Y轴(可理解为绘制一个平面),手动给xyz添加关系得到z,绘制图形
    x = np.linspace(0,10,101)
    y = np.linspace(0,10,101)
    X,Y = np.meshgrid(x,y)
    Z = np.sin(X)-np.cos(Y)
    plt.figure(figsize=(10,6))    # 设置画布
    axes = plt.subplot(projection='3d')    # 指定3d图
    p = axes.plot_surface(X,Y,Z,cmap='rainbow')    # 绘图,添加颜色渲染
    plt.colorbar(p,shrink=0.5)    # 添加色彩条
    
    • 玫瑰图 | 极坐标图
      绘图前调用极坐标绘图接口即可
      注意:极坐标图弧度和角度的换算

    关于图片处理scipy库

    1. 降噪

    思路:导入图片,查看图片的形状,比较彩图和黑白图,其实就是对图片的数组进行操作,彩色图片是三维的rgb,黑白图是二维的,相当于将一组rgb转换成一个值,

    1.1 中值滤波

    原理:通过调整范围内的平均值,进行处理
    ndimage.median_filter(input, size=None, footprint=None, output=None, mode='reflect', cval=0.0, origin=0)
    input指定传入的图片数组
    size指定选取范围的大小

    1.2 高斯滤波

    原理:通过加权平均数进行处理
    ndimage.gaussian_filter(input, sigma, order=0, output=None, mode='reflect', cval=0.0, truncate=4.0)
    input指定传入的图片数组
    sigma指定范围

    1.3 维也纳滤波

    原理:选定范围,使得方差尽可能小,通过调整方差进行处理
    from scipy.signal import wiener
    wiener(im, mysize=None, noise=None)
    im指定传入的图片数组
    mysize指定范围
    效果排序:中值滤波 < 高斯滤波
    高斯滤波(近景好),维也纳滤波(远景好)

    1.4 傅里叶变换

    理解:将描述值的值变成描述变化的值
    思路:转为变化值,分析变化的值,将大的转换为0,再恢复描述值
    from scipy.fftpack import fft2,ifft2
    fft2(x, shape=None, axes=(-2, -1), overwrite_x=False)x指定描述值的值
    ifft2(x, shape=None, axes=(-2, -1), overwrite_x=False)

    2. 添加噪点

    思路:生成一个图像般shape的随机图,然后进行加和处理
    import scipy.misc as misc
    face = misc.face(gray=True)
    plt.imshow(face,cmap='gray')
    noise = np.random.randint(0,100,size=face.shape)
    noise_face = face + noise
    plt.imshow(noise_face,cmap='gray')

    3. 灰度处理

    • 最大值法
      将彩图中的三维数组中的r g b最大的值取出来,作为二维图像的值
    • 均值法
    • 加权平均值法
      指定一个加权数组,对rgb进行处理

    4. 图片基本处理

    导入:import scipy.ndimage as ndimage

    • 移动
      ndimage.shift(input, shift, output=None, order=3, mode='constant', cval=0.0, prefilter=True)
      input指定要移动的图片
      shift指定移动的值,可以是列表,先上下移,后左右
      mode指定填充模式{'reflect', 'constant', 'nearest', 'mirror', 'wrap'}
    • 旋转
      ndimage.rotate(input, angle, axes=(1, 0), reshape=True, output=None, order=3, mode='constant', cval=0.0, prefilter=True)
      input指定要旋转的图片
      angle指定旋转的角度
      mode指定填充模式{'reflect', 'constant', 'nearest', 'mirror', 'wrap'}
    • 缩放
      ndimage.zoom(input, zoom, output=None, order=3, mode='constant', cval=0.0, prefilter=True)
      input指定要缩放的图片
      zoom指定缩放比例,可以是列表
      mode指定填充模式{'reflect', 'constant', 'nearest', 'mirror', 'wrap'}
    • 切割
      数组的切片

    5. 绘图表

    • Series和DataFrame有生成图表的方法
    df.plot(x=None, y=None, kind='line', ax=None, subplots=False,
    sharex=None, sharey=False, layout=None, figsize=None, 
    use_index=True, title=None, grid=None, legend=True, style=None,
    logx=False, logy=False, loglog=False, xticks=None, yticks=None, 
    xlim=None, ylim=None, rot=None, fontsize=None, colormap=None,
    table=False, yerr=None, xerr=None, secondary_y=False, sort_columns=False, **kwds)
    

    kind:指定图表样式
    'line' : 折线图,默认
    'bar' : 柱形图
    'barh' : 横向柱形图
    'hist' : 直方图
    'box' : boxplot
    'kde' : 概率图
    'density' : same as 'kde'
    'area' : area plot
    'pie' : pie plot
    'scatter' : 散布图,必须注明columns,x和y
    'hexbin' : hexbin plot

    • 百分比直方图
    df.hist(column=None, by=None, grid=True, xlabelsize=None, 
    xrot=None, ylabelsize=None, yrot=None, ax=None, sharex=False,
     sharey=False, figsize=None, layout=None, bins=10, **kwds)
    

    相关文章

      网友评论

          本文标题:数据分析-03

          本文链接:https://www.haomeiwen.com/subject/nwyzaftx.html