Matplotlib_basis

matplotlib_basis
基本绘图
提供一对相同长度的数组,然后使用plot()绘制曲线.
如果想绘制特别的曲线,有以下修饰
颜色 | 描述 | 标记 | 描述 | 线条 | 描述 |
---|---|---|---|---|---|
‘b’ | 蓝色 | ‘.’ | 点标记 | ‘-‘ | 实线 |
‘g’ | 绿色 | ‘o’ | 圆圈标记 | ‘–’ | 虚线 |
‘r’ | 红色 | ‘x’ | x标记 | ‘-.’ | 点划线 |
‘c’ | 青色 | ‘D’ | 钻石标记 | ‘:’ | 虚线 |
‘m’ | 品红色 | ‘H’ | 六角标记 | ||
‘y’ | 黄色 | ‘s’ | 正方形标记 | ||
‘k’ | 黑色 | ‘+’ | 加号标记 | ||
‘w’ | 白色 |
如果想在同一幅图里面绘制多条曲线,只需使用多条plot指令即可.如果您想清除图像,直接在程序末尾调用 clf() 方法即可。
figure对象
通过面向对象的思想,将图形封装为图形对象,就能更好的处理控制多个画布.Matplotlib 提供了matplotlib.figure
图形类模块,它包含了创建图形对象的方法。通过调用 pyplot 模块中 figure() 函数来实例化 figure 对象。
参数 | 说明 |
---|---|
figsize | 指定画布的大小,(宽度,高度),单位为英寸。 |
dpi | 指定绘图对象的分辨率,即每英寸多少个像素,默认值为80。 |
facecolor | 背景颜色。 |
dgecolor | 边框颜色。 |
frameon | 是否显示边框。 |
创建画布的步骤如下;
1 | from matplotlib import plot as plt |
add_axes() 的参数值是一个序列,序列中的 4 个数字分别对应图形的左侧,底部,宽度,和高度,且每个数字必须介于 0 到 1 之间。
1 | ax.set_title("sine wave") ##设置标题 |
axes类使用详解
Matplotlib 定义了一个 axes 类(轴域类),该类的对象被称为 axes 对象(即轴域对象),它指定了一个有数值范围限制的绘图区域。在一个给定的画布(figure)中可以包含多个 axes 对象,但是同一个 axes 对象只能在一个画布中使用。
也就是说一个figure里面能有多个axes对象,每个对象是一幅图,但是一个axes对象只能隶属一个figure画布.
通过调用 add_axes() 方法能够将 axes 对象添加到画布中,该方法用来生成一个 axes 轴域对象,对象的位置由参数rect决定。
rect 是位置参数,接受一个由 4 个元素组成的浮点数列表,形如 [left, bottom, width, height] ,它表示添加到画布中的矩形区域的左下角坐标(x, y),以及宽度和高度。(每个参数都是相对于画布的分数,是相对距离)
1 | ax=fig.add_axes([0.1,0.1,0.8,0.8])##表示从画布10%开始画,高与宽是画布的80% |
legend()绘制图例
axes 类的 legend() 方法负责绘制画布中的图例,它需要三个参数
1 | ax.legend(handles, labels, loc) |
-
handles:是一个序列,包含了所有线的实例
-
labels:指定标签名称,也可以在plot的时候,直接命名label
-
loc:指定图例位置
位置 | 字符串表示 | 整数数字表示 |
---|---|---|
自适应 | Best | 0 |
右上方 | upper right | 1 |
左上方 | upper left | 2 |
左下 | lower left | 3 |
右下 | lower right | 4 |
右侧 | right | 5 |
居中靠左 | center left | 6 |
居中靠右 | center right | 7 |
底部居中 | lower center | 8 |
上部居中 | upper center | 9 |
中部 | center | 10 |
axes.plot()方法
这是axes的基本方法,将一个数组和另一个数组汇成线,其修饰符和plot方法类似
颜色 | 描述 | 标记 | 描述 | 线条 | 描述 |
---|---|---|---|---|---|
‘b’ | 蓝色 | ‘.’ | 点标记 | ‘-‘ | 实线 |
‘g’ | 绿色 | ‘o’ | 圆圈标记 | ‘–’ | 虚线 |
‘r’ | 红色 | ‘x’ | x标记 | ‘-.’ | 点划线 |
‘c’ | 青色 | ‘D’ | 钻石标记 | ‘:’ | 虚线 |
‘m’ | 品红色 | ‘H’ | 六角标记 | ||
‘y’ | 黄色 | ‘s’ | 正方形标记 | ||
‘k’ | 黑色 | ‘+’ | 加号标记 | ||
‘w’ | 白色 |
axes.grid()设置网格格式
rid() 方法可以开启或者关闭画布中的网格(即是否显示网格)以及网格的主/次刻度。除此之外,grid() 函数还可以设置网格的颜色、线型以及线宽等属性。网格在默认状态下是关闭的,通过调用上述函数,网格会被自动开启,如果只是想开启不带任何样式的网格,可以通过 grid(True) 来实现。
1 | grid(color, ls, lw) |
轴是连接刻度的线,也就是绘图区域的边界,在绘图区域(axes 对象)的顶部、底部、左侧和右侧都有一个边界线(轴)。通过指定轴的颜色和宽度,从而对进行显示格式设置,比如将所有轴的颜色设置为 None,那么它们都会成为隐藏状态,或者也可以给轴添加相应的颜色。
1 | import matplotlib.pyplot as plt |
设置坐标轴范围
Matplotlib 可以根据自变量与因变量的取值范围,自动设置 x 轴与 y 轴的数值大小。当然,您也可以用自定义的方式,通过 set_xlim() 和 set_ylim() 对 x、y 轴的数值范围进行设置。当对 3D 图像进行设置的时,会增加一个 z 轴,此时使用 set_zlim() 可以对 z 轴进行设置。
示例如下:
1 | import matplotlib.pyplot as plt |
设置刻度和刻度标签
如果需要将刻度设置为“英文数字形式”或者“大写阿拉伯数字”,自带的刻度就需要自己重新设置。
xticks() 和 yticks() 函数接受一个列表对象作为参数,列表中的元素表示对应数轴上要显示的刻度。如:
1 | ax.set_xticks([2,4,6,8,10]) |
也可以分别通过 set_xticklabels() 和 set_yticklabels() 函数设置与刻度线相对应的刻度标签。
1 | import matplotlib.pyplot as plt |
subplot()函数
matplotlib.pyplot模块提供了一个 subplot() 函数,它可以均等地划分画布,该函数的参数格式如下:
1 | plt.subplot(nrows, ncols, index) |
subplot如果出现了图像重叠,那么之前的那幅图就会被消除,但是,如果使用figure对象的add_subplot方法就不会被消除,而是两幅图重叠一起.
通过给figure画布创建多个axes对象也能做到subplot的效果.
subplots()函数
subplots() 函数和 subplot() 函数类似。其不同之处在于,subplots() 既创建了一个包含子图区域的画布,又创建了一个 figure 图形对象,而 subplot() 只是创建一个包含子图区域的画布。
格式如下
1 | fig , ax = plt.subplots(nrows, ncols) |
实例:
1 | import matplotlib.pyplot as plt |
subplot2grid()函数
subplot2grid()能够在画布的特定位置创建 axes 对象(即绘图区域)。不仅如此,它还可以使用不同数量的行、列来创建跨度不同的绘图区域。与 subplot() 和 subplots() 函数不同,subplot2gird() 函数以非等分的形式对画布进行切分,并按照绘图区域的大小来展示最终绘图结果。
1 | plt.subplot2grid(shape, location, rowspan, colspan) |
-
shape:把该参数值规定的网格区域作为绘图区域;
-
location:在给定的位置绘制图形,初始位置 (0,0) 表示第1行第1列;
-
rowsapan/colspan:这两个参数用来设置让子区跨越几行几列。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import matplotlib.pyplot as plt
import numpy as np
#使用 colspan指定列,使用rowspan指定行
a1 = plt.subplot2grid((3,3),(0,0),colspan = 2)
a2 = plt.subplot2grid((3,3),(0,2), rowspan = 3)
a3 = plt.subplot2grid((3,3),(1,0),rowspan = 2, colspan = 2)
x = np.arange(1,10)
a2.plot(x, x*x)
a2.set_title('square')
a1.plot(x, np.exp(x))
a1.set_title('exp')
a3.plot(x, np.log(x))
a3.set_title('log')
plt.tight_layout()
plt.show()
双轴图
在需要两个x轴或者两个y轴的情况下,可以使用Matplotlib提供的twinx()和twiny()函数,实现双轴功能.
绘制指数函数和对数函数的示例如下:
1 | import matplotlib.pyplot as plt |
柱状图
Matplotlib 提供了bar()函数来绘制柱状图。当它与 axes 对象一起使用时,其语法格式如下:
1 | ax.bar(x, height, width, bottom, align) |
- x:标量,代表x坐标
- height:标量序列,表示柱状图高度
- width:可选参数,表示柱状图宽度
- bottom:表示柱状图开始堆叠的起始值
- align:有两个可选项 {“center”,”edge”},默认为 ‘center’,该参数决定 x 值位于柱状图的位置。
直方图
语法格式:
1 | hist(x,bins,range,density,histtype) |
- x:数组或者数组序列
- bins:可选参数,整数或者序列,表示每一个间隔的边缘(起点和终点)默认会生成10个间隔。
- range:指定全局间隔的下限与上限值 (min,max),元组类型,默认值为 None。
- density:如果为 True,返回概率密度直方图;默认为 False,返回相应区间元素的个数的直方图。
- histtype:要绘制的直方图类型,默认值为“bar”,可选值有 barstacked(堆叠条形图)、step(未填充的阶梯图)、stepfilled(已填充的阶梯图)。
饼状图
Matplotlib 提供了一个 pie() 函数,该函数可以生成数组中数据的饼状图。您可使用 x/sum(x) 来计算各个扇形区域占饼图总和的百分比。pie() 函数的参数说明如下:
1 | pie(x,labels,color,autopct) |
- x:数组
- labels:字符串序列,给每一个扇形区域备注一个名字
- color:为每个扇形区域设置颜色,默认按照颜色周期填充
- autopct: 格式化字符串”fmt%pct”,使用百分比的格式设置每个扇形
区的标签,并将其放置在扇形区内。
折线图
matplotlib里面没有绘制折线图的函数,但是可以通过调用text()的方法在图像上绘制注释文本的方法,示例如下:
1 | import matplotlib.pyplot as plt |
散点图
散点图的语法规范:
1 | scatter(x, y, color) |
- x:自变量
- y:因变量
- color:点的颜色
等高线图
如果您想要查看因变量 Z 与自变量 X、Y 之间的函数图像变化(即 Z=f(X,Y)),那么采用等高线图最为直观。
numpy
里面有函数meshgrid
构建网格点矩阵.
在matplotlob API里面提供了绘制等高线(contour
)与填充等高线( contourf
)的函数。这两个函数都需要三个参数,分别是 X、Y 与 Z。
示例:
1 | import matplotlib.pyplot as plt |
3D绘图
通过调用matplotlib
的绘图工具包mpl_toolkits.mplot3d
的一些接口可以实现绘制3D图形.
基础绘图
首先需要创建一个3D
绘图区域,pyplot.axes()
这个axes
对象构造方法提供了一个参数projection
,将其参数值设置为3d
.
1 | from mpl_toolkits import mplot3d as m3d |
然后构建3D
图像
1 | #从x,y,z轴开始构建 |
最后调用plot3D()
方法构建3d
图形
1 | ax1.plot3D(x,y,z,'b') |
3D散点图
ax.scatter3D()
函数可以绘制 3D 散点图
3D等高线图
ax.contour3D()
可以用来创建三维等高线图
3D线框图
plot_wireframe()
能够绘制 3D 线框图。
3D曲线图
plot_surface()
函数可以绘制 3D 曲面图
Matplotlib绘制文本
Matplotlib
通过下列函数绘制出相应内容
函数 | 解释 |
---|---|
text | 在绘图区域的任意位置添加文本。 |
annotate | 在绘图区域的任意位置添加带有可选箭头的注释。 |
xlabel | 在绘图区域的 x 轴上添加标签。 |
ylabel | 在绘图区域的 y 轴上添加标签。 |
title | 为绘图区域添加标题。 |
figtext | 在画布的任意位置添加文本。 |
suptitle | 为画布中添加标题。 |
Matplotlib数学表达式
Matplotlib 中的文本字符串都可以使用 Text Markup(一种文本标记语言)显现出来,Text Markup类似Mathjax.
- Title: Matplotlib_basis
- Author: Charles
- Created at : 2023-02-02 22:14:39
- Updated at : 2023-07-27 16:45:28
- Link: https://charles2530.github.io/2023/02/02/matplotlib-basis/
- License: This work is licensed under CC BY-NC-SA 4.0.