目录
一、基本图形绘制
1. 绘制基本图形
plt.plot()
.plot函数:
plt.plot(x, y, format_string, **kwargs):
x为 x(横轴)轴数据,可为列表或数组;
y同理;
format_string 为控制曲线的格式字符串;
**kwargs 第二组或更多的(x, y, format_string)
format_string: 由 颜色字符、风格字符和标记字符组成。
颜色字符:‘b’蓝色 ;‘#008000’RGB某颜色;‘0.8’灰度值字符串
风格字符:‘-’实线;‘–’破折线; ‘-.’点划线; ‘:’虚线 ; ‘’‘’无线条
标记字符:‘.’点标记 ‘o’ 实心圈 ‘v’倒三角 ‘^’上三角
eg: plt.plot(a, a1.5, ‘go-’, a, a2, ‘*’) 第二条无曲线,只有点
.plot 显示中文字符:
pyplot默认并不支持中文显示,需要 rcParams 修改字体来实现
rcParams的属性:
‘font.family’ 用于显示字体的名字
‘font.style’ 字体风格,正常’normal’ 或斜体’italic’
‘font.size’ 字体大小,整数字号或者’large’ ‘x-small’
eg:
import matplotlib
matplotlib.rcParams[‘font.family’] = ‘STSong’
matplotlib.rcParams[‘font.size’] = 20
只希望在某地方绘制中文字符,不改变别的地方的字体:
在有中文输出的地方,增加一个属性: fontproperties
eg : plt.xlabel(‘横轴:时间’, fontproperties = ‘simHei’, fontsize = 20)
pyplot文本显示函数:
plt.xlabel():对x轴增加文本标签
plt.ylabel():同理
plt.title(): 对图形整体增加文本标签
plt.text(): 在任意位置增加文本
plt. annotate(s, xy = arrow_crd, xytext = text_crd, arrowprops = dict), 在图形中增加带箭头的注解。s表示要注解的字符串是什么,xy对应箭头所在的位置,xytext对应文本所在位置,arrowprops定义显示的属性。
eg:
plt.xlabel(‘横轴:时间’, fontproperties = ‘SimHei’, fontsize = 15, color = ‘green’)
plt.ylabel(‘纵轴:振幅’, fontproperties = ‘SimHei’, fontsize = 15)
plt.title(r’正弦波实例 $y=cons(2\pi x)$’ , fontproperties = ‘SimHei’, fontsize = 25)
plt.annotate (r’%mu=100$, xy = (2, 1), xytext = (3, 1.5),
arrowprops = dict(facecolor = ‘black’, shrink = 0.1, width = 2)) # width表示箭头宽度
plt.text (2, 1, r’$\mu=100$, fontsize = 15)
plt.grid(True)
plt.annotate(s, xy = arrow_crd, xytext = text_crd, arrowprops = dict)
2. 样式和颜色
样式: '-','--','-.',':','.',',',,o,^,v,<,>,s,+,x,D,d,1,2,3,4,h,H,p,| ,_
颜色: b(蓝色),g(绿色),r(红色),c(青色),m(品红),y(黄色),k(黑色),w(白色)
plt.plot(x, y, 'r--')
3. 画布配置
plt.figure()
4. 在一个画布上绘制多个图
plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x), 'r')
plt.plot(x, -np.sin(x), 'g--')
5. 立刻显示图片
plt.show()
二、多图布局
1. 均匀分布
plt.subplot()函数
2. 不均匀分布
plt.subplot()函数
3. 图形嵌套
plt.add_subplot()
4. 图形嵌套
plt.axes()
plt.add_axes()
5. 均匀布局
plt.subplots()
三、Matplotlib绘图属性设置
import matplotlib as mpl
1. 线条属性
color 颜色
linestyle 样式
linewidth 宽度
alpha 透明度
marker 标记
mfcmarker face color 标记的背景颜色
2. 坐标轴刻度
plt.xticks()
plt.yticks()
3. 坐标轴范围
plt.xlim()
plt.ylim()
4. 坐标轴配置
plt.axis()
5. 标题 和 网格
plt.title()
plt.grid()
6. 标签
plt.xlabel()
plt.ylabel()
7. 文本
plt.text()
8. 注释
plt.annotate()
9. 保存图片
plt.savefig()
四、常用视图
plt子绘图区域
plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1):设定网格,选中网格,确定选中行列区域数量,编号从0开始。
eg:
plt.subplot2grid((3, 3), (1, 0), colspan = 2) //(3,3)表示分为3行3列,(1,0)表示选中第1行,第0列的区域进行绘图,colspan=2表示在选中区域的延伸。
1. 折线图
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.title('Sine Wave')
plt.xlabel('X axis')
plt.ylabel('Y axis')
plt.show()
2. 柱状图和条形图
categories = ['A', 'B', 'C', 'D']
values = [3, 7, 2, 5]
plt.bar(categories, values)
plt.title('Bar Chart')
plt.show()
- 直方图
data = np.random.randn(1000)
plt.hist(data, bins=30)
plt.title('Histogram')
plt.show()
4. 箱型图
5. 散点图
x = np.random.rand(100)
y = np.random.rand(100)
plt.scatter(x, y)
plt.title('Scatter Plot')
plt.show()
6. 饼图
7. 面积图
8. 热力图
9. 极坐标图
10. 雷达图
11. 等高线图
五、3D图
1. 三维折线图
2. 三维散点图
3. 三维柱形图
六、图像处理
1. 读取图片
plt.imread()
2. 显示图片
plt.imshow()
3. 垂直翻转
plt.imshow(img, origin='lower')
# 或
plt.imshow(img[::-1])
4. 水平翻转
plt.imshow(img[:, ::-1])
5. 保存图片
plt.imsave()
七、Matplotlib 绘图指南
基本图形绘制
1. 绘制基本图形
使用 plt.plot() 函数可以绘制基本的折线图。
plt.plot(x, y, format_string, **kwargs)
- x 和 y 是数据数组。
- format_string 是格式字符串,由颜色、线条风格和标记字符组成。
示例:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y, 'r--', label='sin(x)')
plt.legend()
plt.show()
2. 显示中文字符
Matplotlib 默认不支持中文显示,需要修改字体设置。
方法一: 修改全局字体设置
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei' # 使用黑体字体
matplotlib.rcParams['font.size'] = 14
方法二: 在文本函数中指定字体
plt.xlabel('横轴: 时间', fontproperties='SimHei', fontsize=14)
3. 画布配置
创建一个新的画布:
plt.figure(figsize=(8, 6)) # 设置画布大小
4. 在一个画布上绘制多个图
plt.figure()
plt.plot(x, np.sin(x), label='sin(x)')
plt.plot(x, np.cos(x), 'r', label='cos(x)')
plt.plot(x, -np.sin(x), 'g--', label='-sin(x)')
plt.legend()
plt.show()
多图布局
1. 均匀分布子图
使用 plt.subplot() 函数创建子图。
plt.subplot(nrows, ncols, index)
示例:
plt.figure(figsize=(12, 8))
plt.subplot(2, 2, 1)
plt.plot(x, np.sin(x))
plt.subplot(2, 2, 2)
plt.plot(x, np.cos(x))
plt.subplot(2, 2, 3)
plt.plot(x, np.tan(x))
plt.subplot(2, 2, 4)
plt.plot(x, np.exp(x))
plt.tight_layout()
plt.show()
2. 不均匀分布子图
使用 plt.subplots() 函数创建多个子图,并返回 Figure 和 Axes 对象。
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(12, 8))
axes[0, 0].plot(x, np.sin(x))
axes[0, 1].plot(x, np.cos(x))
axes[1, 0].plot(x, np.tan(x))
axes[1, 1].plot(x, np.exp(x))
plt.tight_layout()
plt.show()
3. 图形嵌套
使用 fig.add_subplot() 方法添加子图。
fig = plt.figure(figsize=(8, 6))
ax1 = fig.add_subplot(111) # 整个画布
ax2 = fig.add_subplot(221) # 左上角
ax3 = fig.add_subplot(222) # 右上角
ax4 = fig.add_subplot(212) # 整个下部
ax1.plot(x, np.sin(x))
ax2.plot(x, np.cos(x))
ax3.plot(x, np.tan(x))
ax4.plot(x, np.exp(x))
plt.show()
Matplotlib 绘图属性设置
1. 线条属性
plt.plot(x, y, color='blue', linestyle='-', linewidth=2, alpha=0.8,
marker='o', markersize=8, markerfacecolor='red')
- color 或 c: 线条颜色。
- linestyle 或 ls: 线条风格,如 '-', '--', '-.', ':'。
- linewidth 或 lw: 线条宽度。
- alpha: 透明度,取值范围 0 (完全透明) 到 1 (不透明)。
- marker: 数据点标记,如 'o', '.', '^' 等。
- markersize: 标记大小。
- markerfacecolor 或 mfc: 标记填充颜色。
2. 坐标轴刻度设置
设置 x 轴和 y 轴的刻度:
plt.xticks(ticks, labels, rotation=45)
plt.yticks(ticks, labels)
3. 坐标轴范围
设置坐标轴的显示范围:
plt.xlim(xmin, xmax)
plt.ylim(ymin, ymax)
4. 坐标轴配置
plt.axis('equal') # x 和 y 轴比例相同
plt.axis('scaled')
plt.axis('off') # 关闭坐标轴
plt.axis([xmin, xmax, ymin, ymax]) # 设置坐标轴范围
5. 标题和网格
plt.title('正弦波示例', fontproperties='SimHei', fontsize=16)
plt.grid(True, linestyle='--', alpha=0.5)
6. 标签
plt.xlabel('时间', fontproperties='SimHei', fontsize=14)
plt.ylabel('振幅', fontproperties='SimHei', fontsize=14)
7. 文本
在图中任意位置添加文本:
plt.text(2, 1, r'$\mu=100$', fontsize=14)
8. 注释
添加带箭头的注释:
plt.annotate(r'$\mu=100$', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='black', shrink=0.1, width=2))
9. 保存图片
plt.savefig('figure.png', dpi=300, bbox_inches='tight')
- dpi: 图像分辨率。
- bbox_inches='tight': 去除图的周围空白。
高级主题
1. 颜色映射
使用颜色映射表示数据的第三个维度。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.linspace(0, 10, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.cos(Y)
plt.imshow(Z, cmap='viridis', extent=[0, 10, 0, 10], origin='lower')
plt.colorbar(label='振幅')
plt.show()
2. 图例 (Legend)
plt.plot(x, np.sin(x), label='sin(x)')
plt.plot(x, np.cos(x), label='cos(x)')
plt.legend(loc='upper right', fontsize=12)
3. 三维绘图
说明:Axes3D
是通过 projection='3d'
隐式调用。fig.add_subplot(111, projection='3d')
这行代码会隐式地创建一个 3D 坐标系,而这个 3D 坐标系的实现依赖于 mpl_toolkits.mplot3d.Axes3D
。
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
ax.plot_surface(X, Y, Z, cmap='viridis')
plt.show()
完整示例
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
# 设置中文字体
matplotlib.rcParams['font.family'] = 'SimHei'
matplotlib.rcParams['font.size'] = 12
# 创建画布
plt.figure(figsize=(10, 6))
# 绘制正弦波
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
plt.plot(x, y, 'b-', label='sin(x)', linewidth=2)
# 绘制余弦波
y = np.cos(x)
plt.plot(x, y, 'r--', label='cos(x)', linewidth=2)
# 添加标题和标签
plt.title('正弦波与余弦波', fontsize=16)
plt.xlabel('角度 (弧度)', fontsize=14)
plt.ylabel('振幅', fontsize=14)
# 添加图例
plt.legend(loc='upper right', fontsize=12)
# 添加网格
plt.grid(True, linestyle='--', alpha=0.5)
# 添加文本注释
plt.text(4, 0.5, r'$\sin(x) = \cos(x - \frac{\pi}{2})$', fontsize=14)
# 设置坐标轴范围
plt.xlim(0, 2*np.pi)
plt.ylim(-1.2, 1.2)
# 保存图片
plt.savefig('sine_cosine.png', dpi=300, bbox_inches='tight')
# 显示图形
plt.show()