1. 使用函数绘制matplotlib的图片组成元素
文章目录
- 1. 使用函数绘制matplotlib的图片组成元素
- 1.1 绘制`matplotlib`图表组成元素的主要函数
- 1.1.1 函数简介
- 1.`linspace` (在固定范围内取均匀分布的数字)
- 2. `plot`(线性图)
- 3.`scattere`(散点图)
- 4. `numpy.random.rand` (生成随机矩阵)
- 5. `xlim`, `ylim` (限制坐标轴的范围)
- 6. `xlabel`, `ylabel` (设置x轴的标签文本)
- 7. `grid`(可以绘制刻度线的网格线)
- 8.`axhline`, `axvline`(绘制平行于x或y轴的水平参考线)
- 9. `axvspan`, `axhspan`(绘制垂直于x或y轴的参考选定区域)
- 10. `annotate`(添加图形内容细节的指向性注释文本)
- 11. `text` 添加图形内容细节的无指向型注释文本
- 12. `title` 添加整个图形内容的标题
- 13. `legend` (标示图形的文本标签图例)
1.1 绘制matplotlib
图表组成元素的主要函数
在matplotlib
绘制的图像窗口中,底层是个Figure实例,通常称为画布(包含一些可见和不可见的元素),
画布上是图形,图形是Axes
实例,几乎包含了所有matplotlib
组成元素,例如坐标轴、刻度、标签、线和标记等。
Axes实例有x,y轴属性,即 Axex.xaxis
和 Axes.yaxis
控制x轴和y轴相关元素,如刻度线、刻度标签、可短线定位器和刻度线标签格式器
示例:
import matplotlib.pyplot as plt
import numpy as np
def test():
x = np.linspace(0.05, 10, 1000)
y = np.sin(x)
plt.plot(x, y, ls="-", lw=2, label="plot figure")
plt.legend()
plt.show()
代码对应效果
1.1.1 函数简介
1.linspace
(在固定范围内取均匀分布的数字)
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
在指定的时间间隔内返回均匀分布的数字。
返回num 个均匀分布的样本,在区间 [ start , stop ] 上计算。
可以选择排除间隔的端点。
np.linspace(0.05, 10, 1000)
表示在0.05到10之间均匀的取1000个数
2. plot
(线性图)
matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)
官网地址:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html?highlight=plot#matplotlib.pyplot.plot
将 y 与 x绘制为线条和/或标记。
参数介绍:
x, y :array-like or scalar
数据点的水平/垂直坐标。 x值是可选的,默认为range(len(y))
.
通常,这些参数是一维数组。
它们也可以是标量或二维的(在这种情况下,列表示单独的数据集)。
这些参数不能作为关键字传递。
fmt: str, optional
格式字符串,例如红色圆圈的“ro”。有关格式字符串的完整说明,请参阅注释 部分。
格式字符串只是快速设置基本行属性的缩写。所有这些以及更多也可以通过关键字参数来控制。
此参数不能作为关键字传递。
data :indexable object, optional
带有标签数据的对象。如果给定,请提供要在x和y中 plot 的标签名称 。
plt.plot(x, y, ls="-", lw=2, label="plot figure")
x
: x轴上的数值
y
: y轴上的数值
ls
: 折线图的线条风格(linestyle
or ls
: 填写一下参数 {'-', '--', '-.', ':', '', (offset, on-off-seq), ...}
)
Line Styles(线条风格)
character | description |
---|---|
'-' | solid line style(实线样式) |
'--' | dashed line style(虚线样式) |
'-.' | dash-dot line style(点划线样式) |
':' | dotted line style(虚线样式) |
ls='-'
ls='--'
ls='-.'
ls=':'
lw
: 折线图的线条宽度(linewidth
or lw : float
类型)
label
: 标记图形内容的标签文本
3.scattere
(散点图)
import matplotlib.pyplot as plt
import numpy as np
def test():
x = np.linspace(0.05, 10, 1000)
y = np.random.rand(1000)
plt.scatter(x, y, label="scatter figure")
plt.legend()
plt.show()
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)
官网地址:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.scatter.html?highlight=scatter#matplotlib.pyplot.scatter
4. numpy.random.rand
(生成随机矩阵)
random.rand(d0, d1 , ..., dn)
创建一个给定形状的数组,并用 [0, 1) 上均匀分布的随机样本填充它。
参数:
d0, d1, …, dn
: int, optional
d0
表示一维空间的个数
d1
表示二维空间的个数
dn
表示n维空间的个数
返回实际是个矩阵,每个值返回的[0,1)的随机数
np.random.rand(1000,2,2)
的矩阵
1000个元素,每个元素内部有2行 2列
5. xlim
, ylim
(限制坐标轴的范围)
import matplotlib.pyplot as plt
import numpy as np
def test():
x = np.linspace(0.05, 10, 1000)
y = np.random.rand(1000)
plt.scatter(x, y, label="scatter figure")
plt.legend()
plt.xlim(0.05, 10)
plt.ylim(0, 1)
plt.show()
matplotlib.pyplot.xlim(*args, **kwargs)
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.xlim.html?highlight=xlim#matplotlib.pyplot.xlim
获取或设置当前坐标区的 显示范围 限制。
可以传入left
, right
参数
left, right = xlim() # return the current xlim
xlim((left, right)) # set the xlim to left, right
xlim(left, right) # set the xlim to left, right
matplotlib.pyplot.ylim(*args, **kwargs)
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.ylim.html?highlight=ylim#matplotlib.pyplot.ylim
与xlim的意义一样
可以传入 bottom
, top
参数
bottom, top = ylim() # return the current ylim
ylim((bottom, top)) # set the ylim to bottom, top
ylim(bottom, top) # set the ylim to bottom, top
6. xlabel
, ylabel
(设置x轴的标签文本)
import matplotlib.pyplot as plt
import numpy as np
def test():
x = np.linspace(0.05, 10, 1000)
y = np.sin(x)
plt.plot(x, y, ls="-", lw=2, c="c", label="plot figure")
plt.legend()
plt.xlabel("x-axis")
plt.ylabel("x-axis")
plt.show()
matplotlib.pyplot.xlabel(xlabel, fontdict=None, labelpad=None, *, loc=None, **kwargs)
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.xlabel.html?highlight=xlabel#matplotlib.pyplot.xlabel
参数:
xlabel
: str
标签的文字描述(不支持中文)
labelpad
: float
, default
: rcParams["axes.labelpad"]
(default: 4.0
)
轴边界框的点间距,包括刻度和刻度标签。 如果为 None,则保留先前的值。
loc
: {'left', 'center', 'right'}, default: rcParams["xaxis.labellocation"] (default:
‘center’)
标签位置。 这是传递参数 x 和 horizontalalignment 的高级替代方案。
matplotlib.pyplot.ylabel(ylabel, fontdict=None, labelpad=None, *, loc=None, **kwargs)
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.ylabel.html?highlight=ylabel#matplotlib.pyplot.ylabel
参数基本跟xlabel
一致
ylabel
: str
标签的文字描述(不支持中文)
labelpad
: float, default: rcParams["axes.labelpad"] (default:
4.0)
轴边界框的点间距,包括刻度和刻度标签。 如果为 None,则保留先前的值。
loc
: {'bottom', 'center', 'top'}, default: rcParams["yaxis.labellocation"] (default: 'center')
标签位置。 这是传递参数 y 和 horizontalalignment 的高级替代方案。
7. grid
(可以绘制刻度线的网格线)
import matplotlib.pyplot as plt
import numpy as np
def test():
x = np.linspace(0.05, 10, 1000)
y = np.sin(x)
plt.plot(x, y, ls="-.", lw=2, c="c", label="plot figure")
plt.xlabel("x-axis")
plt.ylabel("x-axis")
plt.legend()
plt.grid(linestyle=":", color="r")
plt.show()
matplotlib.pyplot.grid(visible=None, which='major', axis='both', **kwargs)
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html?highlight=grid#matplotlib.pyplot.grid
参数:
visible
: bool or None, optional
(这个参数设置为True或者None没有任何区别,暂不清楚具体意义)
是否显示网格线。 如果提供了任何 kwargs,则假定您希望打开网格并且 visible 将设置为 True。
如果 visible 是 None 并且没有 kwargs,这将切换行的可见性。
which
: {'major', 'minor', 'both'}, optional
应用更改的网格线。
axis
: {'both', 'x', 'y'}, optional
应用更改的轴。
**kwargs
: Line2D
properties
定义网格的线属性, e.g.:
grid(color='r', linestyle='-', linewidth=2)
有效的关键字参数是:
Property | Description |
---|---|
agg_filter | a filter function, which takes a (m, n, 3) float array and a dpi value, and returns a (m, n, 3) array |
alpha | scalar or None |
animated | bool |
antialiased or aa | bool |
clip_box | Bbox |
clip_on | bool |
clip_path | Patch or (Path, Transform) or None |
color or c | color |
dash_capstyle | CapStyle or {‘butt’, ‘projecting’, ‘round’} |
dash_joinstyle | JoinStyle or {‘miter’, ‘round’, ‘bevel’} |
dashes | sequence of floats (on/off ink in points) or (None, None) |
data | (2, N) array or two 1D arrays |
drawstyle or ds | {‘default’, ‘steps’, ‘steps-pre’, ‘steps-mid’, ‘steps-post’}, default: ‘default’ |
figure | Figure |
fillstyle | {‘full’, ‘left’, ‘right’, ‘bottom’, ‘top’, ‘none’} |
gid | str |
in_layout | bool |
label | object |
linestyle or ls | {‘-’, ‘–’, ‘-.’, ‘:’, ‘’, (offset, on-off-seq), …} |
linewidth or lw | float |
marker | marker style string, Path or MarkerStyle |
markeredgecolor or mec | color |
markeredgewidth or mew | float |
markerfacecolor or mfc | color |
markerfacecoloralt or mfcalt | color |
markersize or ms | float |
markevery | None or int or (int, int) or slice or list[int] or float or (float, float) or list[bool] |
path_effects | AbstractPathEffect |
picker | float or callable[[Artist, Event], tuple[bool, dict]] |
pickradius | float |
rasterized | bool |
sketch_params | (scale: float, length: float, randomness: float) |
snap | bool or None |
solid_capstyle | CapStyle or {‘butt’, ‘projecting’, ‘round’} |
solid_joinstyle | JoinStyle or {‘miter’, ‘round’, ‘bevel’} |
transform | unknown |
url | str |
visible | bool |
xdata | 1D array |
ydata | 1D array |
zorder | float |
8.axhline
, axvline
(绘制平行于x或y轴的水平参考线)
import matplotlib.pyplot as plt
import numpy as np
def test():
x = np.linspace(0.05, 10, 1000)
y = np.sin(x)
plt.plot(x, y, ls="-.", lw=2, c="c", label="plot figure")
plt.xlabel("x-axis")
plt.ylabel("x-axis")
plt.legend()
plt.grid(linestyle=":", color="r")
plt.axhline(y=0.0, c="r", ls='--', lw=2)
plt.show()
matplotlib.pyplot.axhline(y=0, xmin=0, xmax=1, **kwargs)
参数:y
: float, default: 0
水平线数据坐标中的 y 位置。
xmin
: float, default: 0
应该在 0 和 1 之间,0 是绘图的最左侧,1 是绘图的最右侧。(决定画的参考线的左侧起始位置)
xmax
: float, default: 1
应该在 0 和 1 之间,0 是绘图的最左侧,1 是绘图的最右侧。(决定画的参考线的右侧结束位置)
return
: Line2D (返回了2d的线)
测试
plt.axhline(y=0.0, c="r", ls='--', lw=2, xmin=0.5)
综合示例
import matplotlib.pyplot as plt
import numpy as np
def test():
x = np.linspace(0.05, 10, 1000)
y = np.sin(x)
plt.plot(x, y, ls="-.", lw=2, c="c", label="plot figure")
plt.xlabel("x-axis")
plt.ylabel("x-axis")
plt.legend()
plt.grid(linestyle=":", color="r")
plt.axhline(y=0.0, c="r", ls='--', lw=2)
plt.axvline(x=4.0, c="r", ls='--', lw=2)
plt.show()
matplotlib.pyplot.axvline(y=0, xmin=0, xmax=1, **kwargs)
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.axvline.html?highlight=axvline#matplotlib.pyplot.axvline
参数:
x
: float, default: 0
x 在垂直线的数据坐标中的位置。
ymin
: float, default: 0
应该在 0 和 1 之间,0 是图的bottom ,1 是图的top 。
ymax
: float, default: 1
应该在 0 和 1 之间,0 是图的bottom ,1 是图的top 。
9. axvspan
, axhspan
(绘制垂直于x或y轴的参考选定区域)
import matplotlib.pyplot as plt
import numpy as np
def test():
x = np.linspace(0.05, 10, 1000)
y = np.sin(x)
plt.plot(x, y, ls="-.", lw=2, c="c", label="plot figure")
plt.xlabel("x-axis")
plt.ylabel("x-axis")
plt.legend()
plt.grid(linestyle=":", color="r")
plt.axvspan(xmin=4.0, xmax=6.0, facecolor="y", alpha=0.3)
plt.axhspan(ymin=0.0, ymax=0.5, facecolor="y", alpha=0.3)
plt.show()
matplotlib.pyplot.axvspan(xmin, xmax, ymin=0, ymax=1, **kwargs)
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.axvspan.html?highlight=axvspan#matplotlib.pyplot.axvspan
在轴上添加一个垂直跨度(矩形)。
矩形水平从 xmin 到 xmax,默认情况下,整个 y 轴垂直。 y-span 可以使用ymin(默认值:0)和ymax(默认值:1)以轴为单位进行设置; 例如 ymin = 0.5
总是指 y 轴的中间,而不管 [set_ylim
](https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.set_ylim.html #matplotlib.axes.Axes.set_ylim)设置的限制。
参数:
xmin
: float
跨度的下 x 坐标,以数据单位表示。
xmax
: float
跨度的上 x 坐标,以数据单位表示。
ymin
: float, default: 0
跨度的下 y 坐标,以 y 轴单位 (0-1) 为单位。
ymax
: float, default: 1
跨度的上 y 坐标,以 y 轴单位 (0-1) 为单位。
matplotlib.pyplot.axhspan(ymin, ymax, xmin=0, xmax=1, **kwargs)
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.axhspan.html?highlight=axhspan#matplotlib.pyplot.axhspan
在轴上添加一个水平跨度(矩形)。
矩形从 ymin 垂直跨越到 ymax,默认情况下,整个 x 轴水平跨越。 x-span 可以使用轴单位的xmin(默认值:0)和xmax(默认值:1)来设置; 例如 xmin = 0.5
总是指 x 轴的中间,而不管 [set_xlim
](https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.set_xlim.html #matplotlib.axes.Axes.set_xlim) 设置的限制。
参数:
ymin
:float
跨度的下 y 坐标,以数据单位表示。
ymax
: float
跨度的上 y 坐标,以数据单位表示。
xmin
: float, default: 0
跨度的下 x 坐标,以 x 轴 (0-1) 为单位。
xmax
: float, default: 1
跨度的上 x 坐标,以 x 轴 (0-1) 为单位。
10. annotate
(添加图形内容细节的指向性注释文本)
import matplotlib.pyplot as plt
import numpy as np
def test():
x = np.linspace(0.05, 10, 1000)
y = np.sin(x)
plt.plot(x, y, ls="-.", lw=2, c="c", label="plot figure")
plt.xlabel("x-axis")
plt.ylabel("x-axis")
plt.legend()
plt.grid(linestyle=":", color="r")
plt.annotate("最大值", xy=(np.pi / 2, 1.0),
xytext=((np.pi / 2) + 1.0, 0.8),
weight="bold",
color="b",
arrowprops=dict(arrowstyle="->",
connectionstyle="arc3",
color="b"))
plt.show()
plt.show()
matplotlib.pyplot.annotate(text, xy, *args, **kwargs)
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.annotate.html?highlight=annotate#matplotlib.pyplot.annotate
用文本注释点 xy。
在最简单的形式中,文本放置在 xy 处。
可选地,文本可以显示在 xytext 的另一个位置。 然后可以通过定义箭头属性添加从文本指向注释点 xy 的箭头。
参数:
text
:str
注释的文本。(不支持中文)
xy
: (float, float)
要注释的点 (x, y)。 坐标系由 xycoords 确定。
xytext
: (float, float), default: *xy*
放置文本的位置 (x, y)。 坐标系由 textcoords 确定。(主要是标记点的说明)
xycoords
: str or Artist
or Transform
or callable or (float, float), default: ‘data’
xy 给出的坐标系。支持以下类型的值:
Value | Description |
---|---|
‘figure points’ | Points from the lower left of the figure |
‘figure pixels’ | Pixels from the lower left of the figure |
‘figure fraction’ | Fraction of figure from lower left |
‘subfigure points’ | Points from the lower left of the subfigure |
‘subfigure pixels’ | Pixels from the lower left of the subfigure |
‘subfigure fraction’ | Fraction of subfigure from lower left |
‘axes points’ | Points from lower left corner of axes |
‘axes pixels’ | Pixels from lower left corner of axes |
‘axes fraction’ | Fraction of axes from lower left |
‘data’ | Use the coordinate system of the object being annotated (default) |
‘polar’ | (theta, r) if not native ‘data’ coordinates |
textcoords
: str or Artist
or Transform
or callable or (float, float), default: value of xycoords
xytext 给出的坐标系。
arrowprops
: dict, optional
用于在 xy 和 xytext 位置之间绘制 FancyArrowPatch
箭头的属性 。 默认为无,即不绘制箭头。
由于历史原因,有两种不同的方式来指定箭头,“simple” 和"fancy":
具体的内部参数可以参考文档
11. text
添加图形内容细节的无指向型注释文本
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
def test():
# 设置字体为黑体
matplotlib.rcParams['font.family'] = 'SimHei'
# 设置在中文字体是能够正常显示负号(“-”)
matplotlib.rcParams['axes.unicode_minus'] = False
x = np.linspace(0.05, 10, 1000)
y = np.sin(x)
plt.plot(x, y, ls="-.", lw=2, c="c", label="plot figure")
plt.xlabel("x-轴")
plt.ylabel("x-轴")
plt.legend()
plt.grid(linestyle=":", color="r")
plt.annotate("最大值", xy=(np.pi / 2, 1.0),
xytext=((np.pi / 2) + 1.0, 0.8),
weight="bold",
color="b",
arrowprops=dict(arrowstyle="->",
connectionstyle="arc3",
color="b"))
plt.text(3.3, 0.09, "y=sin(x)", weight="bold", color="b")
plt.show()
matplotlib.pyplot.text(x, y, s, fontdict=None, **kwargs)
将文本添加到轴。
将文本 s 添加到数据坐标中位置 x、y 的轴上。
参数:
x, y
: float
放置文本的位置。 默认情况下,这是在数据坐标中。 可以使用 transform 参数更改坐标系。
s
: str
文本。
fontdict
: dict, default: None
用于覆盖默认文本属性的字典。 如果 fontdict 为 None,则默认值由 rcParams
确定。
12. title
添加整个图形内容的标题
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
def test():
# 设置字体为黑体
matplotlib.rcParams['font.family'] = 'SimHei'
# 设置在中文字体是能够正常显示负号(“-”)
matplotlib.rcParams['axes.unicode_minus'] = False
x = np.linspace(0.05, 10, 1000)
y = np.sin(x)
plt.plot(x, y, ls="-.", lw=2, c="c", label="plot figure")
plt.xlabel("x-轴")
plt.ylabel("y-轴")
plt.legend()
plt.grid(linestyle=":", color="r")
plt.annotate("最大值", xy=(np.pi / 2, 1.0),
xytext=((np.pi / 2) + 1.0, 0.8),
weight="bold",
color="b",
arrowprops=dict(arrowstyle="->",
connectionstyle="arc3",
color="b"))
plt.text(3.3, 0.09, "y=sin(x)", weight="bold", color="b")
plt.title("y=sin(x)")
plt.show()
matplotlib.pyplot.title(label, fontdict=None, loc=None, pad=None, *, y=None, **kwargs)
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.title.html?highlight=title#matplotlib.pyplot.title
13. legend
(标示图形的文本标签图例)
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
def test():
# 设置字体为黑体
matplotlib.rcParams['font.family'] = 'SimHei'
# 设置在中文字体是能够正常显示负号(“-”)
matplotlib.rcParams['axes.unicode_minus'] = False
x = np.linspace(0.05, 10, 1000)
y = np.sin(x)
plt.plot(x, y, ls="-.", lw=2, c="c", label="plot figure")
plt.xlabel("x-轴")
plt.ylabel("y-轴")
plt.legend(loc="upper left")
plt.grid(linestyle=":", color="r")
plt.annotate("最大值", xy=(np.pi / 2, 1.0),
xytext=((np.pi / 2) + 1.0, 0.8),
weight="bold",
color="b",
arrowprops=dict(arrowstyle="->",
connectionstyle="arc3",
color="b"))
plt.text(3.3, 0.09, "y=sin(x)", weight="bold", color="b")
plt.title("y=sin(x)")
plt.show()
matplotlib.pyplot.legend(*args, **kwargs)
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.legend.html?highlight=legend#matplotlib.pyplot.legend