Matplotlib图形组成
Matplotlib 生成的图形主要由以下几个部分构成:
- Figure:指整个图形,您可以把它理解成一张画布,它包括了所有的元素,比如标题、轴线等;
- Axes:绘制 2D 图像的实际区域,也称为轴域区,或者绘图区;
- Axis:指坐标系中的垂直轴与水平轴,包含轴的长度大小(图中轴长为 7)、轴标签(指 x 轴,y轴)和刻度标签;
- Artist:您在画布上看到的所有元素都属于 Artist 对象,比如文本对象(title、xlabel、ylabel)、Line2D 对象(用于绘制2D图像)等
Matplotlib.pyplot接口汇总
Matplotlib figure图形对象
在 Matplotlib 中,面向对象编程的核心思想是创建图形对象(figure object)。通过图形对象来调用其它的方法和属性,这样有助于我们更好地处理多个画布。在这个过程中,pyplot 负责生成图形对象,并通过该对象来添加一个或多个 axes 对象(即绘图区域)。
备注:可以使用
figsize
属性指定画布大小,单位英寸#创建一个空白画布 fig = plt.figure() # 使用 add_axes() 将 axes 轴域添加到画布中, ''' 序列中的 4 个数字分别对应图形的左侧,底部,宽度,和高度,且每个数字必须介于 0 到 1 之间。 应该是指绘图区距离画布的左侧和底部多远,宽度和高度分别占画布多大 ''' ax=fig.add_axes([0,0,1,1])
Matplotlib axes类使用详解
Matplotlib 定义了一个 axes 类(轴域类),该类的对象被称为 axes 对象(即轴域对象),它指定了一个有数值范围限制的绘图区域。在一个给定的画布(figure)中可以包含多个 axes 对象,但是同一个 axes 对象只能在一个画布中使用。
通过调用图形图像的
add_axes()
方法可以将 axes 对象添加到画布中。axes 对象在画布中的位置由函数参数rect
决定。rect 是位置参数,接受一个由 4 个元素组成的浮点数列表,形如 [left, bottom, width, height] ,它表示添加到画布中的矩形区域的左下角坐标(x, y),以及宽度和高度。axes 类的成员函数
axes.legend(handles,labels,loc)
:负责绘制图例。
handles 参数是一个序列,它包含了所有线型的实例;
labels 是一个字符串序列,用来指定标签的名称;
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()
:使用方式同plt.plot()
它可以绘制点和线,语法格式如下:
# 画单条线 plot([x], y, [fmt], *, data=None, **kwargs) # 画多条线 plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
参数说明:
x,y
: 点或线的节点,x 为 x 轴数据,y 为 y 轴数据,数据可以列表或数组。fmt
: 可选,定义基本格式(如颜色、标记和线条样式)。fmt = '[marker][line][color]'
marker
:'.' 点标记,'o' 实心圈标记,'s'正方形标记,'D'钻石标记,'H'六角标记,v' 倒三角标记,'^' 上三角标记,'>' 右三角标记,'<' 左三角标记,''无任何标记...等等。line
:'‐' 实线,'‐‐' 破折线,'‐.' 点划线,':' 虚线,’'不画线...等等。color
:'b' 蓝色,'m' 洋红色,'g' 绿色,'y' 黄色,'r' 红色,'k' 黑色,'w' 白色,'c' 青绿色,'#008000' RGB 颜色符串。多条曲线不指定颜色时,会自动选择不同颜色。**kwargs
: 可选,用在二维平面图上,设置指定属性,如标签,线的宽度等。
- markersize,简写为 ms:定义标记的大小。
- markerfacecolor,简写为 mfc:定义标记内部的颜色。
- markeredgecolor,简写为 mec:定义标记边框的颜色。
- linewidth ,简写为 lw,定义线的宽度;值可以是浮点数,如:1、2.0、5.67 等。
其他:
axes.set_xlabel()/set_ylabel()/set_title()
使用方式类似plt.xlabel()/ylabel()/title()
使用
xlabel()
和ylabel()
方法来设置 x 轴和 y 轴的标签使用
title()
方法来设置标题标题与标签的定位
- title() 方法提供了 loc 参数来设置标题显示的位置,可以设置为: 'left', 'right', 和 'center', 默认值为 'center'。
- xlabel() 方法提供了 loc 参数来设置 x 轴显示的位置,可以设置为: 'left', 'right', 和 'center', 默认值为 'center'。
- ylabel() 方法提供了 loc 参数来设置 y 轴显示的位置,可以设置为: 'bottom', 'top', 和 'center', 默认值为 'center'。
Matplotlib subplot()函数用法详解
感觉配合图形对象使用感觉更方便,更推荐使用下一节介绍的方法
详细:Matplotlib subplot()函数用法详解 (biancheng.net)
在使用 Matplotlib 绘图时,我们大多数情况下,需要将一张画布划分为若干个子区域,之后,我们就可以在这些区域上绘制不用的图形。
matplotlib.pyplot
模块提供了一个 subplot() 函数,它可以均等地划分画布,该函数的参数格式如下:
plt.subplot(nrows, ncols, index)
nrows 与 ncols 表示要划分几行几列的子区域(nrows*nclos表示子图数量),index 的初始值为1,用来选定具体的某个子区域。
配合图形对象:
使用函数
add_subplot(nrows, ncols, index)
函数返回一个 axes 对象。要调整子图之间的间距使用函数:
fig.subplots_adjust( left=None, bottom=None, right=None, top=None, wspace=None, hspace=None, )
Matplotlib subplots()函数详解
matplotlib.pyplot
模块提供了一个 subplots() 函数,它的使用方法和 subplot() 函数类似。其不同之处在于,subplots() 既创建了一个包含子图区域的画布,又创建了一个 figure 图形对象,而 subplot() 只是创建一个包含子图区域的画布。subplots 的函数格式如下:
fig , ax = plt.subplots(nrows, ncols)
备注:可以设置参数
constrained_layout=True
自适应子图间距nrows 与 ncols 表示两个整数参数,它们指定子图所占的行数、列数。
函数的返回值是一个元组,包括一个图形对象和一个axes对象数组:[nrows, ncols];可以通过数组索引方式访问axes对象。
Matplotlib subplot2grid()函数详解
matplotlib.pyplot
模块提供了 subplot2grid() ,该函数能够在画布的特定位置创建 axes 对象(即绘图区域)。不仅如此,它还可以使用不同数量的行、列来创建跨度不同的绘图区域。与 subplot() 和 subplots() 函数不同,subplot2gird() 函数以非等分的形式对画布进行切分,并按照绘图区域的大小来展示最终绘图结果。函数语法格式如下:
plt.subplot2grid(shape, location, rowspan, colspan)
参数含义如下:
- shape:把该参数值规定的网格区域作为绘图区域;
- location:在给定的位置绘制图形,初始位置 (0,0) 表示第1行第1列;
- rowsapan/colspan:这两个参数用来设置让子区跨越几行几列。
Matplotlib grid()设置网格格式
axes 对象提供的 grid() 方法可以开启或者关闭画布中的网格(即是否显示网格)以及网格的主/次刻度。除此之外,grid() 函数还可以设置网格的颜色、线型以及线宽等属性。
grid() 的函数使用格式如下:
grid(color='b', ls = '-.', lw = 0.25)
参数含义如下:
- color:表示网格线的颜色;
- ls:表示网格线的样式;
- lw:表示网格线的宽度;
网格在默认状态下是关闭的,通过调用上述函数,网格会被自动开启,如果您只是想开启不带任何样式的网格,可以通过 grid(True) 来实现。
坐标轴设置
设置坐标轴范围
axes.set_xlim(下限, 上限)
设置刻度
- 方法1
采用
axes.set_xticks(ticks)
方法,x轴的刻度就是一维数组ticks。也可以通过set_xticklabels()
函数设置与刻度线相对应的刻度标签。
- 方法2
见:(38条消息) matplotlib设置坐标轴刻度间隔_单单一个越字的博客-CSDN博客_matplotlib坐标轴刻度间距
Matplotlib中文乱码解决方案
import matplotlib.pyplot as plt plt.rcParams["font.sans-serif"]=["SimHei"] #设置字体 plt.rcParams["axes.unicode_minus"]=False #该语句解决图像中的“-”负号的乱码问题
直方图
axes.hist(
x,
bins=None,
range=None,
density=False,
weights=None,
cumulative=False,
bottom=None,
histtype='bar',
align='mid',
orientation='vertical',
rwidth=None,
log=False,
color=None,
label=None,
stacked=False,
*,
data=None,
**kwargs,
)
统计连续型数据的直方图。
具体使用:matplotlib.pyplot.hist — Matplotlib 3.5.1 documentation
x
: 待统计的数据,(n,) array or sequence of (n,) arrays
bins
:int or sequence or str
- int:将数据划分为指定数量的统计区间,区间长度相等
- sequence : assuming is
[1,2,3,4]
, then the first bin is[1, 2)
(including 1, but excluding 2) and the second[2, 3)
. The last bin, however, is[3, 4]
, which includes 4.
range
: tuple or None, default: None
The lower and upper range of the bins. Lower and upper outliers are ignored. If not provided, range is (x.min(), x.max())
. Range has no effect if bins is a sequence.
If bins is a sequence or range is specified, autoscaling is based on the specified bin range instead of the range of x.
rwidth
: The relative width of the bars as a fraction of the bin width. If None
, automatically compute the width.