第三神器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)
网友评论