pip install matplotlib
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt #从matplotlib中导入plt绘图工具
#随机生成数据用于绘图
x = np.arange(2,20,1)
print(x)
y = (x-1) ** 3 + 1
print(y)
#绘图
plt.plot(x,y)
#展示绘图
plt.show()
#保存为图片
plt.savefig('test.png')
Figure(整张画布)
└── Axes(坐标系 / 子图)
├── x轴
├── y轴
└── 各种图形(线、点、柱子…)
在 matplotlib(plt)里,Figure 是“整张画布 / 整个图窗口”,是所有图形的最外层容器。
可以把它理解成:一张白纸,你在上面画图。
plt.figure()
plt.plot ..... #这个窗口内的内容
plt.show()
自动调整子图之间的间距:
plt.tight_layout()
展示绘图:
plt.show()
保存为图片:
plt.savefig('图片名.png')
plt.figure(填入参数)
控制图像的“物理大小”
figsize=(width, height)
缩放, 每英寸像素点数
plt.figure(figsize=(8, 6), dpi=150)
Figure 的 编号或名字
用于区分多个窗口
plt.figure(num=1) plt.figure(num="my_figure")
背景颜色
plt.figure(facecolor='lightgray')
Figure 边框颜色
edgecolor='black'
是否显示 Figure 边框
frameon=True
plt.figure()
plt.plot(10,20)
plt.figure()
plt.plot(30,40)
plt.show()

用来在同一个 Figure(画布)里创建多个子图(小图)来展示不同内容
plt.subplot(nrows, ncols, index)
nrows:行数ncols:列数index:当前子图的位置(从 1 开始)import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10)
plt.subplot(1, 2, 1) # 1行2列,第1个
plt.plot(x, x)
plt.title("y = x")
plt.subplot(1, 2, 2) # 1行2列,第2个
plt.plot(x, x**2)
plt.title("y = x^2")
plt.show()

plt.imshow()
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
# 读取图片
img = mpimg.imread('example.png') # 支持png、jpg等
# 显示图片
plt.imshow(img)
plt.show()
plt.imshow(img)
plt.axis('off') # 关闭坐标轴
plt.title("My Image") # 添加标题
plt.show()
如果是灰度图片,可以用 cmap='gray'
plt.imshow(img, cmap='gray')
plt.axis('off')
plt.show()
你可以直接用二维数组绘制图片
import numpy as np
data = np.random.rand(100, 100) # 生成100x100随机数组
plt.imshow(data, cmap='viridis') # 热力图样式
plt.colorbar()
plt.show()
plt.plot(x, y)
import matplotlib.pyplot as plt
# x 和 y 数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# 绘制折线图
plt.plot(x, y)
# 显示图形
plt.show()
解释:
x:横坐标数据(可选,如果不提供,默认是[0, 1, 2, ...])y:纵坐标数据(必须提供)plt.show():显示图表
plt.plot(x, y, fmt, **kwargs)
| 参数 | 作用 | 示例 |
|---|---|---|
color |
线条颜色 | 'red'、'blue' |
linestyle |
线型 | '-'(实线)、'--'(虚线)、':'(点线) |
marker |
数据点标记 | 'o'、's'、'*' |
label |
图例标签 | '折线1' |
linewidth |
线宽 | 2 |
markersize |
标记大小 | 8 |
plt.plot(x, y, color='green', linestyle='--', marker='o', linewidth=2, markersize=6, label='示例折线')
plt.legend() # 显示图例
plt.show()
plt.scatter()
import matplotlib.pyplot as plt
# x 和 y 数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# 绘制散点图
plt.scatter(x, y)
# 显示图形
plt.show()
解释:
x:横坐标数据y:纵坐标数据plt.show():显示图表
plt.scatter(x, y, **kwargs)
| 参数 | 作用 | 示例 |
|---|---|---|
s |
点的大小(面积) | 50 |
c |
点的颜色 | 'red' 或 [1,2,3,4,5](可映射颜色) |
marker |
点的形状 | 'o'(圆)、's'(方)、'^'(三角) |
alpha |
点的透明度 | 0.5 |
label |
图例标签 | '数据点' |
plt.scatter(x, y, s=100, c='green', marker='^', alpha=0.6, label='示例点')
plt.legend() # 显示图例
plt.show()
plt.bar(x, y)
import matplotlib.pyplot as plt
# x 表示类别,y 表示数值
x = ['A', 'B', 'C', 'D']
y = [10, 15, 7, 12]
# 绘制柱状图
plt.bar(x, y)
# 显示图形
plt.show()
解释:
x:类别标签y:对应数值plt.show():显示图表
| 参数 | 作用 | 示例 |
|---|---|---|
color |
柱子颜色 | 'blue' 或 ['red','green','blue'] |
width |
柱子宽度 | 0.5(默认 0.8) |
edgecolor |
柱子边框颜色 | 'black' |
label |
图例标签 | '组1' |
bottom |
设置柱子起点 | 0(默认) |
plt.bar(x, y, color='skyblue', edgecolor='black', width=0.6, label='数量')
plt.legend()
plt.show()
plt.barh(y, width)
参数含义:
y:每个柱子在 纵轴上的位置 / 类别width:柱子的 长度(数值大小),沿 x 轴方向用途:
| 功能 | 方法 | 说明 |
|---|---|---|
| 设置x轴标签 | plt.xlabel("x轴名称") |
添加x轴描述 |
| 设置y轴标签 | plt.ylabel("y轴名称") |
添加y轴描述 |
| 设置图标题 | plt.title("标题") |
添加整个图的标题 |
| 标签字体 | plt.xlabel(..., fontsize=12, color='red') |
控制字体大小、颜色等 |
| 功能 | 方法 | 说明 |
|---|---|---|
| 设置坐标轴范围 | plt.xlim([xmin, xmax]) |
plt.ylim([ymin, ymax]) |
| 自动缩放 | plt.autoscale() |
根据数据自动调整坐标轴范围 |
| 反转坐标轴 | plt.gca().invert_xaxis() |
plt.gca().invert_yaxis() |
| 隐藏坐标轴 | plt.axis('off') |
隐藏坐标轴、刻度线和标签 |
| 坐标轴比例 | plt.axis('equal') |
x、y轴单位长度相同,常用于绘制几何图形 |
| 全局控制 | plt.axis([xmin, xmax, ymin, ymax]) |
同时设置x、y轴范围 |
| 功能 | 方法 | 说明 |
|---|---|---|
| 设置主刻度 | plt.xticks([列表]) |
plt.yticks([列表]) |
| 设置刻度标签 | plt.xticks([列表], ['标签1','标签2']) |
刻度位置对应自定义文字 |
| 刻度旋转 | plt.xticks(rotation=角度) |
旋转刻度标签,避免重叠 |
| 设置刻度间隔 | plt.locator_params(axis='x', nbins=5) |
指定刻度数量 |
| 次刻度 | plt.minorticks_on() |
打开次刻度显示(辅助参考线) |
| 刻度格式化 | plt.gca().xaxis.set_major_formatter(格式化器) |
控制刻度显示格式,如百分比或科学计数 |
| 功能 | 方法 | 说明 |
|---|---|---|
| 显示网格 | plt.grid(True) |
打开网格 |
| 控制轴方向 | plt.grid(axis='x') |
只显示x或y方向网格 |
| 控制线型 | plt.grid(linestyle='--', color='gray', linewidth=0.5) |
修改网格样式 |
plt.text()
plt.text(x, y, s, fontdict=None, **kwargs)
x:文本的 x 坐标(数据坐标系)
y:文本的 y 坐标(数据坐标系)
s:要显示的字符串
fontdict:可选,字体字典,如 {'size': 12, 'color': 'red', 'weight': 'bold'}
**kwargs:其他可选参数,如:
color:文字颜色
fontsize:字体大小
rotation:旋转角度
ha / va:水平/垂直对齐方式('center', 'left', 'right')
import matplotlib.pyplot as plt
x = [1, 2, 3]
y = [4, 5, 6]
plt.plot(x, y, marker='o')
# 在坐标点(2,5)添加文本
plt.text(2, 5, '这是点(2,5)', color='blue', fontsize=12, ha='left', va='bottom')
plt.show()
在图中添加带箭头或指向特定点的文本注释
plt.annotate()
plt.annotate(
text, # 显示的文本
xy, # 注释指向的点 (x, y)
xytext=None, # 文本显示的位置 (x, y),默认与 xy 相同
xycoords='data', # xy 的坐标系,常用 'data' 或 'axes fraction'
textcoords='data', # xytext 的坐标系
arrowprops=None, # 箭头属性字典
fontsize=None, # 字体大小
color=None, # 字体颜色
**kwargs
)
text:要显示的文字
xy:箭头指向的数据坐标 (x, y)
xytext:文本显示的坐标 (x, y),可以不与箭头重合
xycoords / textcoords:坐标系,可选:
'data' → 数据坐标
'axes fraction' → 图像轴的比例坐标(0~1)
arrowprops:箭头样式字典,例如:
arrowprops = dict(facecolor='black', shrink=0.05)

import matplotlib.pyplot as plt
x = [1, 2, 3]
y = [4, 5, 6]
plt.plot(x, y, marker='o')
for i, j in zip(x, y):
plt.annotate(f'({i},{j})', xy=(i,j), xytext=(i+0.1,j+0.1),
arrowprops=dict(arrowstyle='->', color='gray'))
plt.show()

import matplotlib.pyplot as plt
x = [1, 2, 3]
y = [4, 5, 6]
plt.plot(x, y, marker='o')
for i, j in zip(x, y):
plt.annotate(f'({i},{j})', xy=(i,j), xytext=(i+0.1,j+0.1),
arrowprops=dict(arrowstyle='->', color='gray'))
plt.show()
plt.figtext() - 在 整个 Figure(画布)上 添加文本的函数
matplotlib.pyplot.figtext(x, y, s, fontdict=None, **kwargs)
x:文本的水平位置(0~1,0是左边,1是右边)
y:文本的垂直位置(0~1,0是底部,1是顶部)
s:文本内容(字符串)
fontdict:字体字典,可以设置字体大小、颜色、样式等
**kwargs:其他参数,如 color、ha(水平对齐)、va(垂直对齐)等

import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [4, 5, 6])
# 在Figure左下角添加文本
plt.figtext(0.1, 0.1, "这是Figure上的文本", fontsize=12, color='red')
plt.show()