matplotlib基本使用

时间:2024-03-13 22:09:29

 

图片灰度处理

三种方法

读图: 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 : 设置字体, 字典形式

    • fontsize 字体大小

    • 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语法,用