Matplotlib 参数及元素
linestyle或ls 线条风格
'-'
实线
':'
虚线
'–'
破折线
'None',''
什么都不画
'-.'
点划线
masker 标记形状
'o'
圆圈
'.'
点
'D'
菱形
's'
正方形
'h'
六边形1
'*'
星号
'H'
六边形2
'd'
小菱形
'_'
水平线
'v'
一角朝下的三角形
'8'
八边形
'<'
一角朝左的三角形
'p'
五边形
'>'
一角朝右的三角形
','
像素
'^'
一角朝上的三角形
'+'
加号
''
竖线
'None',''
无
'x’
X
color或c 颜色
'b'
蓝色
'g'
绿色
'r'
红色
'y'
黄色
'c'
青色
'k'
黑色
'm'
洋红色
'w'
白色
标题和x/y轴的标签
通过plt.title()或者ax.set_title()函数可以设置相应图标的标题。
通过plt.xlabel()/plt.ylabel()或者ax.set_xlabel()/ax.set_ylabel()可以设置对应坐标轴的标签。
注意:ax用来指代axes对象。
grid() 网格显示
grid(b=None, which='major', axis='both', **kwargs)
参数说明:
b:设置是否打开网格
color:设置网格颜色
linestyle:设置网格线型
linewidth:设置网格线宽
legend() 图例显示
legend(*args, **kwargs)
参数说明:
handles:添加到图例中的绘图对象(可省略)
labels:对应于handles对象顺序的label,可省略(此时需要在画图时通过label参数指定每个图形对象的名称)
ncol:图例的列数,可以通过该参数使得图例分列显示
loc:图例设置的位置
'best'
0
'upper right'
1
'upper left'
2
'lower left'
3
'lower right'
4
'right'
5
'center left'
6
'cevter right'
7
'lower center'
8
'upper center'
9
'center'
10
坐标轴
通过plt.axis([xmin,xmax,ymin,ymax])可以设置坐标轴的范围,其中xmin,xmax,ymin,ymax分别表示x轴左边界,x轴右边界,y轴下边界,y轴上边界。
通过plt.xlim(xmin,xmax)和plt.ylim(ymin,ymax)方法可以分别调整x轴和y轴的范围,使用该函数时可以传参[minval,maxval]来同时设置某轴的最小值和最大值,也可以分别通过xmin,xmax,ymin,ymax来单独设置某个轴的某个边界值。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1,10,50)
y1,y2,y3,y4 = x / 2, np.sqrt(x), np.log(x), x**1.5
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
#plt直接绘图
#同时修改xy坐标轴范围
plt.subplot(221)
plt.plot(x,y1)
plt.axis([-10,10,0,100])
#只修改x坐标轴范围
plt.subplot(222)
plt.plot(x,y2)
plt.xlim(-10,10)
#只修改y坐标轴范围
plt.subplot(223)
plt.plot(x,y3)
plt.ylim(0,100)
#只修改x坐标轴左边界
plt.subplot(224)
plt.plot(x,y4)
plt.xlim(xmin=-10)
plt.show()
#面向对象方式绘图
fig = plt.figure() #创建figure对象
ax1 = fig.add_subplot(221)
ax1.plot(x,y1)
ax1.axis([-10,10,0,100])
ax2 = fig.add_subplot(222)
ax2.plot(x,y2)
ax2.set_xlim(-10,10)
ax3 = fig.add_subplot(223)
ax3.plot(x,y3)
ax3.set_ylim(0,100)
ax4 = fig.add_subplot(224)
ax4.plot(x,y4)
ax4.set_xlim(xmin=-10)
plt.show()
locator_params() 坐标轴刻度的调整
通过locator_params()方法来调整坐标轴的刻度间距,该函数的声明为:
locator_params(axis='both', tight=None, **kwargs)
参数说明:
axis:用来选择要调整的坐标轴,该参数有三个值'both','x','y'
nbins:坐标轴划分的等份数
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1,50,20)
y = 2*x
fig = plt.figure() #创建figure对象
ax1 = fig.add_subplot(121)
ax1.plot(x,y)
ax1.locator_params(axis='x',nbins=20)
ax2 = fig.add_subplot(122)
ax2.plot(x,y)
ax2.locator_params(axis='y',nbins=20)
plt.show()
注释的添加
通过使用annotate()方法可以往图形上添加带箭头的注释,该函数的声明为:
annotate(s, xy, *args, **kwargs)
参数说明:
s:注释字符串
xy:要注释的点
xytext:放置注释字符串的位置
arrowprops:设置在位置xy和xytext之间绘制的箭头的属性,参数类型为字典,其中常用的参数包括
width
箭身的宽度
headwidth
箭头的宽度
facecolor
箭头的颜色
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1,50,20)
y = 2*x
fig = plt.figure() #创建figure对象
ax = fig.add_axes([0.1,0.1,0.8,0.8]) #添加坐标轴对象
ax.plot(x,y)
ax.annotate("(2,4)",xy=(2,4),xytext=(2,25),arrowprops={"facecolor":'r'})
plt.show()
通过使用text()方法可以往图形上只添加文字注释,该函数的声明为:
text(x, y, s, fontdict=None, withdash=False, **kwargs)
参数说明:
x,y:文字注释内容的x坐标和y坐标
s:文字注释的内容
fontfamily:文字字体类型,常用的包括'serif','sans-serif','cursive','fantasy','monospace'
fontstyle:字体样式,常用的包括'normal','italic','oblique'
fontsize/size:字体大小,可以采用数字
fontweight/weight:设置字体的粗细,可以使用0~1000范围内的数字来设置,数字越大字体越粗
注意:上述函数可以输出数学公式,使用方式和输出文本的用法一致,只需要设置s = r"mathexperssion"即可,其中mathexpression是包含在$$之间的字符串(常用的数学符号编写)。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1,50,20)
y = np.sqrt(x)
fig = plt.figure() #创建figure对象
ax = fig.add_axes([0.1,0.1,0.8,0.8]) #添加坐标轴对象
ax.plot(x,y)
ax.text(15,5,r"$y=\sqrt{x}$",size=20,fontstyle="italic")
plt.show()
多图显示
通过plt.subplot()方法可以将figure划分为多个子图,但每条subplot命令只会创建一个子图,该函数的常用使用形式为:
subplot(nrows, ncols, index, **kwargs)
参数说明:
nrows:figure划分的行数
ncols:figure划分的列数
index:图案nrows行ncols列划分的块再按从左往右,从上往下的顺序排列的当前图的索引
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1,20,20)
y1,y2,y3 = np.sqrt(x),np.log(x),x**1.5
plt.subplot(131)
plt.plot(x,y1)
plt.subplot(132)
plt.plot(x,y2)
plt.subplot(133)
plt.plot(x,y3)
plt.show()
通过plt.subplots()方法可以创建一个figure和一批子图,返回的形式为(figure, subplots),该方法的常用形式为:
subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw) -> tuple
参数说明:
nrows:figure划分的行数
ncols:figure划分的列数
在使用该方式时,我们可以通过二维索引来获取子图,例如axes[1,1]表示获取到的是第2行第2列的子图对象,然后利用该子图对象我们可以调用画图函数来进行图形绘制,当然也可以通过for循环来获取子图对象。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1,20,20)
y1,y2,y3,y4 = np.sqrt(x),np.log(x),x**1.5,2*x + 2
ys = [y1,y2,y3,y4]
fig,axs = plt.subplots(2,2)
for y,ax in zip(ys,axs.flatten()):#使用for循环时需要展平返回的多维数组
ax.plot(x,y)
plt.show()
面向对象的方式
对于面向对象的方式,首先需要新建一个figure对象,然后可以利用add_subplot()函数新建坐标轴对象(该函数的参数和plt.subplot()类似),再调用该函数即可进行绘图,示例代码如下:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1,20,20)
y1,y2 = np.sqrt(x),np.log(x)
fig = plt.figure()
ax1 = fig.add_subplot(1,2,1)
ax1.plot(x,y1)
ax2= fig.add_subplot(1,2,2)
ax2.plot(x,y2)
plt.show()
图片显示
matplotlib也可以用来展示图片,而且它可以向展示上述的绘制图形一样同时展示多张图片,通过plt.imshow(X)可以用来显示图片,其中X可以是通过PLI.Image.open()或cv2.imread()或matplotlib.image.imread()打开的图形数据,示例代码如下:
import matplotlib.pyplot as plt
import cv2
imgs = []
for i in range(1,5):
imgs.append(cv2.imread(str(i) + ".jpg"))
plt.figure(figsize=[4,6])
i = 1
for img in imgs:
plt.subplot(4,2,i)
plt.imshow(img)
i += 1
#cv2打开图片是按BGR,而matplotlib是按RGB显示因此当使用cv2打开图片是需要先将图片转换为RGB
img_c = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.subplot(4,2,i)
plt.imshow(img_c)
i += 1
plt.show()
最后更新于
这有帮助吗?