三种方法
读图: jin = plt.imread(\'./jinzhengen.png\')
最小值 作为灰度值
jin_min = jin.min(axis=2)
最大值 作为灰度值
jin_max = jin.max(axis=2)
平均值 作为灰度值
jin_mean = jin.mean(axis=2)
加权平均值 作为灰度值 (使用最多)
weight = np.array([0.299,0.587,0.114]) # 权重jin_weight = np.dot(jin, weight)/3
Matplotlib基础知识
Matplotlib中的基本图表包括的元素
-
x轴和y轴 : 水平和垂直的轴线
-
x轴和y轴刻度 : 刻度标示坐标轴的分隔,包括最小刻度和最大刻度
-
x轴和y轴刻度标签 : 表示特定坐标轴的值
-
绘图区域 : 实际绘图的区域
可以理解为 画板(包含边框), 画布(绘图区)
只含单一曲线的图
plt.plot(x,y)
plt.plot(y) # 只给一个值,默认为y轴,以y数据索引0 到 N-1 作为x轴
包含多个曲线的图
1、可以使用多个plot函数(推荐),在一个图中绘制多个曲线 (碰到 plt.show() 函数结束本次绘图)
plt.plot(x,y)
plt.plot(x,np.sin(x))
plt.show() # show方法显示前面画布的所有图,之后画图会重建一个画布
plt.plot(x,x)
2、也可以在一个plot函数中传入多对X,Y值,在一个图中绘制多个曲线
plt.plot(x,y,x,np.sin(x)) # x, y需成对出现
网格线
plt.grid(True) 方法为图添加网格线
-
lw(linewidth) : 线的粗细
-
ls(linestyle): \'-\' ,\'--\' , \'-.\', \':\'
-
alpha : 线的明暗程度
-
color : 颜色
-
which : major 主网格
-
axis: \'x\' ,\'y\',\'both\' 显示哪方向网格线
plt.grid(which=\'major\')
在一个画布中画多个子图
方式1:
x= np.linspace(-20,20,200)
plt.figure(figsize=(3*5,4)) # 创建画布 宽为15(一行三个子图3*5), 高为4
axes1 = plt.subplot(1,3,1) # 创建子图 一行三列第一个
axes1.plot(x,np.sin(x))
plt.grid()
axes2 = plt.subplot(1,3,2)
axes2.plot(x,np.sin(x))
plt.grid()
axes3 = plt.subplot(1,3,3)
axes3.plot(x,x**2)
plt.grid()
方式2:
坐标轴界限
axis方法
如果axis方法没有任何参数,则返回当前坐标轴的上下限axis(xmin =,ymax = )
设置坐标轴类型:
plt.axis(\'equal\')
-
\'off\': 关闭坐标轴
-
\'equal\': x,y轴刻度精度相等
-
\'scaled\': 效果和equal一样,x,y轴刻度范围一样
xlim方法和ylim方法
除了plt.axis方法,还可以通过xlim,ylim方法设置坐标轴范围
plt.plot(x,x**2)
plt.xlim(xmin=-1, xmax=1) # 关键字形式
plt.ylim((0,1)) # 还可以元组形式
坐标轴标签
xlabel方法和ylabel方法
注意: plt.xlabel() 子图使用: 对象.set_xlabel()
-
fontdict : 设置字体, 字典形式
-
-
c(color): \'r\'
-
rotation 旋转角度 (可写字典外面)
-
position=(0,1)) (可写字典外面)
-
x = np.linspace(-1,1,1000)
y = (1-x**2)**0.5
plt.plot(x,y,x,-y)
xlabel = plt.xlabel(\'x\', fontdict=dict(fontsize=50, c=\'r\',rotation=90)) # 直接参数设置
# xlabel.set_rotation(60) # 通过xlabel对象设置
plt.ylabel(\'y=(1-x^2)^0.5\', fontdict=dict(fontsize=20), rotation=0, position=(0,1))
标题
注意: plt.title() 子图使用: 对象.set_title()
-
loc=\'right\' 标题显示位置 center(默认) left
-
fontdict : 字典形式 同标签
plt.title(\'circle\', loc=\'right\', fontdict={\'fontsize\':50, \'rotation\':60})
# 子图没有.title(),需使用.set_title()
图例
legend()方法
两种传参方法:
【推荐使用】在plot函数中增加label参数
在legend方法中传入字符串列表
-
loc参数
plt.legend(loc=8)
plt.legend(loc=(0,1)) # 相对坐标(画板坐标)
字符串 | 数值 | 字符串 | 数值 |
---|---|---|---|
best | 0 | center left | 6 |
upper right | 1 | center right | 7 |
upper left | 2 | lower center | 8 |
lower left | 3 | upper center | 9 |
lower right | 4 | center | 10 |
right | 5 |
-
ncol参数
ncol控制图例中有几列
plt.legend(loc=8,ncol=3)
保存图片
figure.savefig(): 需创建figure对象
-
filename含有文件路径的字符串或Python的文件型对象。图像格式由文件扩展名推断得出,例如,.pdf推断出PDF,.png推断出PNG (“png”、“pdf”、“svg”、“ps”、“eps”……)
-
dpi图像分辨率(每英寸点数),默认为100
-
facecolor图像的背景色,默认为“w”(白色)
-
transparent=True 透明
-
edgecolor: 边缘颜色
figure = plt.figure(figsize=(10,6))
plt.plot(n1,label=\'one\',ls=\'-.\')
figure.savefig(\'./art.png\', facecolor=\'g\', dpi=200, transparent=True)
设置plot的风格和样式
点和线的样式
颜色
参数color或c
颜色值的方式
-
别名
-
color=\'r\'
-
-
合法的HTML颜色名
-
color = \'red\'
-
颜色 | 别名 | HTML颜色名 | 颜色 | 别名 | HTML颜色名 |
---|---|---|---|---|---|
蓝色 | b | blue | 绿色 | g | green |
红色 | r | red | 黄色 | y | yellow |
青色 | c | cyan | 黑色 | k | black |
洋红色 | m | magenta | 白色 | w | white |
-
HTML十六进制字符串
color = \'#eeefff\'
-
归一化到[0, 1]的RGB元组
color = (0.3, 0.3, 0.4)
透明度
alpha参数 值为0-1范围
plt.plot(x,np.sin(x), c=\'b\', alpha=0.1)
背景色
设置坐标轴的背景色(画布)
# 方式1
axes = plt.subplot(facecolor=\'g\') # 设置画布背景色
axes.plot(x, np.sin(x))
# 方式2
plt.gca(facecolor=\'g\') # 获取当前轴面
plt.plot(x, np.sin(x))
设置画板背景色
plt.figure(facecolor=\'r\')
plt.plot(x, np.sin(x))
线型
参数linestyle或ls
线条风格 | 描述 | 线条风格 | 描述 |
---|---|---|---|
\'-\' | 实线 | \':\' | 虚线 |
\'--\' | 破折线 | \'steps\' | 阶梯线 |
\'-.\' | 点划线 | \'None\' / \',\' | 什么都不画 |
线宽
参数linewidth或lw
plt.plot(x, np.sin(x), linewidth=5, c=\'r\')
不同宽度的破折线
dashes参数 设置破折号序列各段的宽度
# dashes的元素个数必须是偶数个 [线宽,空白宽] 交替
plt.plot(x, np.sin(x), linewidth=5, c=\'r\', dashes=[3,5,1,2,6,7])
点型
marker : 点形状
markersize: 点大小
x = np.linspace(0, 2*np.pi, 10)
plt.plot(x, np.sin(x), c=\'r\', marker=\'2\', markersize=50)
标记 | 描述 | 标记 | 描述 |
---|---|---|---|
\'1\' | 一角朝下的三脚架 | \'3\' | 一角朝左的三脚架 |
\'2\' | 一角朝上的三脚架 | \'4\' | 一角朝右的三脚架 |
标记 | 描述 | 标记 | 描述 |
---|---|---|---|
\'s\' | 正方形 | \'p\' | 五边形 |
\'h\' | 六边形1 | \'H\' | 六边形2 |
\'8\' | 八边形 |
标记 | 描述 | 标记 | 描述 |
---|---|---|---|
\'.\' | 点 | \'x\' | X |
\'*\' | 星号 | \'+\' | 加号 |
\',\' | 像素 |
标记 | 描述 | 标记 | 描述 |
---|---|---|---|
\'o\' | 圆圈 | \'D\' | 菱形 |
\'d\' | 小菱形 | \'\',\'None\',\' \',None | 无 |
多参数连用
颜色、点型、线型
x = np.linspace(0, 2*np.pi, 10)
plt.figure(figsize=(10,8))
plt.plot(x, np.sin(x), \'g-o\', markersize=50) # g-o 表示 线颜色,线型,点型 可不写全
更多点和线的设置
x = np.linspace(0,10, 10)
plt.plot(x,x,c=\'b\', lw=2, ls=\'-.\', marker=\'o\', markersize=10, markeredgecolor=\'g\',markeredgewidth=3,markerfacecolor=\'r\')
参数 | 描述 | 参数 | 描述 |
---|---|---|---|
color或c | 线的颜色 | linestyle或ls | 线型 |
linewidth或lw | 线宽 | marker | 点型 |
markeredgecolor | 点边缘的颜色 | markeredgewidth | 点边缘的宽度 |
markerfacecolor | 点内部的颜色 | markersize | 点的大小 |
在一条语句中为多个曲线进行设置
x = np.linspace(0,2*np.pi, 10)
plt.plot(x,np.sin(x),\'g:o\',x,np.cos(x),\'b-.*\',markersize=10 )
多个曲线同一设置
# 统一相同设置,使用关键参数, 会覆盖前面单独设置属性
x = np.linspace(0,2*np.pi, 10)
plt.plot(x, np.sin(x), \'g:d\',x, np.cos(x),color=\'r\') # g:d 失效
三种设置方式
向方法传入关键字参数
plt.plot(x,np.sin(x), c=\'r\')
对实例使用一系列的setter方法
line, = plt.plot(x,np.sin(x))line.set_color(\'g\')
使用setp()方法
line, = plt.plot(x,np.sin(x))plt.setp(line, \'color\', \'y\') # setp : set property
X、Y轴坐标刻度
xticks()和yticks()方法
plt.plot(x,np.sin(x), c=\'r\')
# ticks 刻度 labels 标签
plt.xticks([0, np.pi/2, np.pi, 3*np.pi/2, 2*np.pi], [\'0\', \'np.pi/2\', \'np.pi\', \'3np.pi/2\', \'2np.pi\'])
plt.yticks([-1, 0 ,1], [\'-1\', \'0\', \'1\'])
面向对象方法
axes = plt.subplot() # 创建子图
使用子图对象调用:
set_xticks、set_yticks、set_xticklabels、set_yticklabels方法
正弦余弦
LaTex语法,用