前言
为了让 Matplotlib 绘图代码更规范、易读,且为后期图形完善预留空间,建议遵循一些规范绘图方法。😉
1.管理图形对象
建议使用 plt.figure()
或者 plt.subplots()
管理完整的图形对象,而非直接用 plt.plot(...)
绘图。这样能为添加图例、样式、标注等预留空间,使代码更规范、可读性更强。
2.添加图标题、图例
fig, axes = plt.subplots()
axes.set_xlabel('x label') # 横轴名称
axes.set_ylabel('y label')
axes.set_title('title') # 图形名称
axes.plot(x, x**2)
axes.plot(x, x**3)
axes.legend(["y = x**2", "y = x**3"], loc=0) # 图例
set_xlabel()
和set_ylabel()
分别设置横轴和纵轴的名称。set_title()
设置图形的标题。legend()
用于添加图例,loc
参数标记图例位置:1 代表右上角、2 代表左上角、3 代表左下角、4 代表右下角,0 代表自适应。
3.线型、颜色、透明度设置
颜色与透明度
fig, axes = plt.subplots()
axes.plot(x, x+1, color="red", alpha=0.5)
axes.plot(x, x+2, color="#1155dd")
axes.plot(x, x+3, color="#15cc55")
color
参数可使用颜色名称(如"red"
)或十六进制颜色码(如"#1155dd"
)设置线的颜色。alpha
参数设置线的透明度,取值范围为[0, 1]
。
线型与线宽
fig, ax = plt.subplots(figsize=(12, 6))
# 线宽
ax.plot(x, x+1, color="blue", linewidth=0.25)
# 虚线类型
ax.plot(x, x+5, color="red", lw=2, linestyle='-')
# 虚线交错宽度
line, = ax.plot(x, x+8, color="black", lw=1.50)
line.set_dashes([5, 10, 15, 10])
linewidth
(可缩写为lw
)设置线的宽度。linestyle
(可缩写为ls
)设置线型,如'-'
表示实线,'-.'
表示点划线,':'
表示虚线。set_dashes()
方法可自定义虚线的交错宽度。
符号设置
fig, ax = plt.subplots(figsize=(12, 6))
ax.plot(x, x + 9, color="green", lw=2, ls='--', marker='+')
# 符号大小和颜色
ax.plot(x, x+15, color="purple", lw=1, ls='-',marker='o', markersize=8, markerfacecolor="red")
marker
参数设置标记符号,如'+'
、'o'
、's'
等。markersize
设置标记符号的大小。markerfacecolor
设置标记符号内部的颜色。markeredgewidth
设置标记符号边缘的宽度。markeredgecolor
设置标记符号边缘的颜色。
4.画布网格、坐标轴范围设置
fig, axes = plt.subplots(1, 2, figsize=(10, 5))
# 显示网格
axes[0].plot(x, x**2, x, x**3, lw=2)
axes[0].grid(True)
# 设置坐标轴范围
axes[1].plot(x, x**2, x, x**3)
axes[1].set_ylim([0, 60])
axes[1].set_xlim([2, 5])
grid(True)
显示画布网格。set_ylim()
和set_xlim()
分别设置纵轴和横轴的范围。
5.绘制不同类型子图
n = np.array([0, 1, 2, 3, 4, 5])
fig, axes = plt.subplots(1, 4, figsize=(16, 5))
axes[0].scatter(x, x + 0.25*np.random.randn(len(x)))
axes[0].set_title("scatter")
axes[1].step(n, n**2, lw=2)
axes[1].set_title("step")
axes[2].bar(n, n**2, align="center", width=0.5, alpha=0.5)
axes[2].set_title("bar")
axes[3].fill_between(x, x**2, x**3, color="green", alpha=0.5)
axes[3].set_title("fill_between")
scatter()
绘制散点图。step()
绘制梯步图。bar()
绘制条形图,align
参数设置条形的对齐方式,width
设置条形的宽度。fill_between()
绘制面积图,填充两条曲线之间的区域。