matplotlib基本使用

Posted deaseyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matplotlib基本使用相关的知识,希望对你有一定的参考价值。

 

图片灰度处理

三种方法

读图: 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语法,用??π等表达式在图表上写上希腊字母

α alpha , Π pi , θ theta , σ sigma , λ lambda

?

 

2D图形

直方图

【直方图的参数只有一个x!!!不像条形图需要传入x,y】

hist() 参数

  • bins可以是一个bin数量的整数值,也可以是表示bin的一个序列。默认值为10

  • normed如果值为True,直方图的值将进行归一化处理,形成概率密度,默认值为False

  • color指定直方图的颜色。可以是单一颜色值或颜色的序列。如果指定了多个数据集合,颜色序列将会设置为相同的顺序。如果未指定,将会使用一个默认的线条颜色

  • orientation设置orientation为horizontal创建水平直方图。默认值为vertical

?

 

条形图

【条形图有两个参数x,y!】

bar() 水平显示、barh() 垂直显示

plt.bar(np.arange(0,10), x, width=1 ) # 条形图的x必须写.

饼图

【饼图也只有一个参数x!】

pie()饼图适合展示各部分占总体的比例,条形图适合比较各部分的大小

n = [1,2,3]
plt.pie(n)   # n 个元素和超过1, 会计算个元素所占综合总和比例
?
n = [0.4, 0.2, 0.3, 0.1]   # 各部分刚好占满饼图
plt.pie(n)
?
n = [0.4, 0.2, 0.3,]   # 普通未占满饼图
plt.pie(n)
?

饼图阴影、分裂等属性设置

#labels参数设置每一块的标签;labeldistance参数设置标签距离圆心的距离(比例值)

#autopct参数设置比例值的显示格式(%1.1f%%);pctdistance参数设置比例值文字距离圆心的距离

#explode参数设置每一块顶点距圆形的长度(比例值);colors参数设置每一块的颜色;

#shadow参数为布尔值,设置是否绘制阴影

# autopct: auto percentage  显示比例   explode: 裂开, 饼尖距圆心距离  labels: 各部分标签名
# labeldistance: 标签距圆心距离   pctdistance: 比例距圆心距离,默认0.6 shadow=True 加阴影  
# startangle: 起始角度 textprops={‘size‘,20} 字体
plt.pie([0.4, 0.2, 0.3, 0.1],autopct=‘%.2f%%‘, explode=[0.1,0.2,0.1,0.3], labels=list(‘ABCD‘),labeldistance=1,colors=[‘red‘, ‘green‘, ‘magenta‘, ‘cyan‘],pctdistance=0.8,shadow=True,startangle=60,textprops={‘size‘:20})

 

散点图

【散点图需要两个参数x,y,但此时x不是表示x轴的刻度,而是每个点的横坐标!】

scatter()

x = np.linspace(0, 2* np.pi, 20)
y = np.sin(x)
plt.scatter(x,y, s=100,c=‘r‘, marker=‘d‘, alpha=0.6, ) # s 点的大小 alpha 透明度
生成随机大小,随机颜色,随机透明 的饼图
x = np.random.randn(1000)
y = np.random.randn(1000)
plt.figure(figsize=(10,6))
colors = np.random.rand(1000,4) # RGBA 随机点颜色,透明度
size = np.random.randint(0,100,size=1000)  # 随机点大小
plt.scatter(x,y,marker=‘d‘,c=colors, s=size)

颜色表示:

向量 - 对每个标记使用不同的颜色,并以线性方式将 c 中的值映射到当前颜色图中的颜色。c的长度必须等于 xy 的长度。

plt.scatter(x,y,marker=‘d‘,c=[0,1,2,1,3], s=size) # c 中每个数字代表一个颜色,映射图中点的颜色, c长度等于x和y长度

 

图形内的文字、注释、箭头

控制文字属性的方法:

所有的方法会返回一个matplotlib.text.Text对象

Pyplot函数API方法描述
text() mpl.axes.Axes.text() 在Axes对象的任意位置添加文字
xlabel() mpl.axes.Axes.set_xlabel() 为X轴添加标签
ylabel() mpl.axes.Axes.set_ylabel() 为Y轴添加标签
title() mpl.axes.Axes.set_title() 为Axes对象添加标题
legend() mpl.axes.Axes.legend() 为Axes对象添加图例
figtext() mpl.figure.Figure.text() 在Figure对象的任意位置添加文字
suptitle() mpl.figure.Figure.suptitle() 为Figure对象添加中心化的标题
annnotate() mpl.axes.Axes.annotate() 为Axes对象添加注释(箭头可选)

图形内的文字

text() 和 figtext()

# 显示文字到坐标轴内
plt.text(0,0,‘sin(0)=0‘)
plt.text(np.pi/2, 1, ‘sin($pi/2$)=1‘,fontdict=dict(fontsize=20))
?
# 显示文字到坐标轴外
plt.figtext(1,0.5, ‘y=sin(x)‘)

注释

annotate()xy参数设置箭头指示的位置,xytext参数设置注释文字的位置arrowprops参数以字典的形式设置箭头的样式width参数设置箭头长方形部分的宽度,headlength参数设置箭头尖端的长度,headwidth参数设置箭头尖端底部的宽度,facecolor(color)设置箭头颜色shrink参数设置箭头顶点、尾部与指示点、注释文字的距离(比例值)

# 第一个坐标代表指示点, 第二个代表注释文字位置
plt.annotate(‘this is me‘,(5,10),(8,15),arrowprops=dict(width=10,headwidth=20,headlength=20, color=‘r‘,shrink=0.1))

设置图例

bbox_to_anchor,ncol mode,borderaxespad设置注解 arrowstyle

plt.plot(n1, label=‘plot‘)
plt.plot(n2, label=‘2nd plot‘)
plt.plot(n3, label=‘last plot‘)
plt.legend(loc=(0,1), ncol=3, mode=‘expand‘,borderaxespad=0,bbox_to_anchor=[0,1,1,0.08] )
plt.ylim(ymax=43) # 设置y轴上限
plt.annotate(‘important value‘, (50,20),(20,40),arrowprops=dict(arrowstyle=‘->‘))

箭头

样式arrstyles = [‘-‘, ‘->‘, ‘-[‘, ‘<-‘, ‘<->‘, ‘fancy‘, ‘simple‘, ‘wedge‘]

 

3D图

曲面图

from mpl_toolkits.mplot3d.axes3d import Axes3D

x = np.linspace(0,8,100)
y = np.linspace(0,8,100)
X,Y = np.meshgrid(x,y)   # 生成网格
Z = np.sin(X) + np.cos(Y) + 3
?
plt.figure(figsize=(7*2, 6))
axes1 = plt.subplot(1,2,1,projection=‘3d‘)  # 定义画三维图的子图
axes1.plot_surface(X,Y,Z)    # 画三维图
?
axes2 = plt.subplot(1,2,2,projection=‘3d‘)  
axes2 = axes2.plot_surface(X,Y,Z,cmap=‘rainbow‘)    
plt.colorbar(axes2,shrink=0.5)  # 设置颜色柱, shrink 宽高缩小为0.5倍

玫瑰图/极坐标条形图

x = np.arange(0,2*np.pi,np.pi/4) # x 使用弧度

y = 一个 ndarray

plt.subplot(projection=‘polar‘, facecolor=‘g‘)plt.bar(x,y,width=np.pi/4,color=np.random.rand(8,3))

 

以上是关于matplotlib基本使用的主要内容,如果未能解决你的问题,请参考以下文章

在 matplotlib 内联和 QT 后端之间切换 Python 脚本

html PHP代码片段: - AJAX基本示例:此代码演示了使用PHP和JavaScript实现的基本AJAX功能。

实时matplotlib图在循环中不起作用[重复]

matplotlib的基本使用

Matplotlib基本图形之条形图

Python matplotlib 基础练习:画出正弦曲线等