美文网首页
数据分析-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