
Python Matplotlib 3.8.2 绘制 12 种常见函数图像从基础到 Sigmoid 完整代码数学函数可视化是理解抽象概念最直观的方式之一。对于Python开发者而言Matplotlib库就像一把瑞士军刀能将枯燥的数学公式转化为生动的图形。本文将带你用Matplotlib 3.8.2版本通过Jupyter Notebook环境绘制12个经典函数图像从基础的线性函数到机器学习中常用的Sigmoid函数。不同于静态的数学教材我们将重点探讨如何通过代码控制线条样式、子图布局和交互效果让函数图像活起来。1. 环境配置与基础绘图1.1 安装与导入确保你的Python环境已安装Matplotlib 3.8.2。如果尚未安装可以通过以下命令获取最新稳定版pip install matplotlib3.8.2基础导入语句建议放在Notebook的开头单元格import numpy as np import matplotlib.pyplot as plt %matplotlib inline # 确保图像在Jupyter中内嵌显示1.2 第一个函数图像线性函数我们从最简单的yx开始了解Matplotlib的基本绘图流程x np.linspace(-10, 10, 500) # 生成-10到10之间的500个等距点 y x plt.figure(figsize(8, 6)) plt.plot(x, y, labelyx, colorblue, linewidth2) plt.title(Basic Linear Function, fontsize14) plt.xlabel(x-axis, fontsize12) plt.ylabel(y-axis, fontsize12) plt.grid(True, linestyle--, alpha0.7) plt.legend() plt.show()关键参数说明linspace生成指定范围内的均匀分布数值figsize控制图像显示尺寸(宽,高)linewidth线条粗细程度alpha网格线透明度(0-1)2. 代数函数可视化2.1 二次函数与立方函数多项式函数是代数的基础我们可以通过子图对比不同阶数的函数fig, (ax1, ax2) plt.subplots(1, 2, figsize(14, 6)) # 二次函数 x np.linspace(-5, 5, 300) ax1.plot(x, x**2, label$yx^2$, colorred) ax1.set_title(Quadratic Function) ax1.legend() # 立方函数 ax2.plot(x, x**3, label$yx^3$, colorgreen) ax2.set_title(Cubic Function) ax2.legend() plt.tight_layout() # 自动调整子图间距 plt.show()2.2 倒数与根式函数这类函数通常有定义域限制需要特别注意处理奇异点x np.linspace(-5, 5, 1000) x x[x ! 0] # 移除0点避免除以零错误 plt.figure(figsize(12, 6)) plt.plot(x, 1/x, label$y1/x$, colorpurple) plt.plot(x[x0], np.sqrt(x[x0]), label$y\sqrt{x}$, colororange) plt.ylim(-10, 10) # 限制y轴范围 plt.title(Reciprocal and Root Functions, pad20) plt.legend() plt.show()提示对于有定义域限制的函数使用布尔索引过滤无效数据点比捕捉异常更高效3. 指数与对数函数3.1 指数函数对比指数函数的变化率特性在金融和自然科学中广泛应用x np.linspace(-2, 2, 200) a_values [0.5, 1, 2, np.e] # 包含自然对数底数e plt.figure(figsize(10, 6)) for a in a_values: plt.plot(x, a**x, labelf$y{a}^x$, linewidth2) plt.title(Exponential Functions Comparison, pad15) plt.legend(bbox_to_anchor(1.05, 1), locupper left) plt.grid(True, alpha0.3) plt.show()3.2 对数函数特性对数函数的底数转换公式在实际应用中非常重要x np.linspace(0.001, 10, 400) # 对数函数定义域为正实数 plt.figure(figsize(10, 6)) plt.plot(x, np.log(x), labelNatural log ($e$ base), linestyle-) plt.plot(x, np.log10(x), labelCommon log (10 base), linestyle--) plt.plot(x, np.log2(x), labelBinary log (2 base), linestyle:) plt.title(Logarithmic Functions, pad15) plt.legend() plt.show()对数函数绘制要点x0处函数值趋近于负无穷需要设置合理的x轴起点不同底数的对数函数曲线形状相似只是陡峭程度不同使用不同线型(linestyle)增强可区分性4. 三角函数与S型曲线4.1 基本三角函数展示三角函数可视化时注意展示其周期性和对称性x np.linspace(-2*np.pi, 2*np.pi, 500) fig, axes plt.subplots(3, 1, figsize(10, 12)) functions [(sin, np.sin, blue), (cos, np.cos, green), (tan, np.tan, red)] for ax, (name, func, color) in zip(axes, functions): ax.plot(x, func(x), labelfy{name}(x), colorcolor) ax.set_title(f{name.upper()} Function, pad10) ax.legend() ax.grid(True) if name tan: ax.set_ylim(-5, 5) # 限制tan函数显示范围 plt.tight_layout() plt.show()4.2 S型曲线专题Sigmoid等S型曲线在机器学习中扮演着重要角色x np.linspace(-10, 10, 200) plt.figure(figsize(12, 7)) plt.plot(x, 1/(1np.exp(-x)), labelSigmoid, linewidth3) plt.plot(x, np.tanh(x), labelTanh, linestyle--) plt.plot(x, np.arctan(x), labelArctan, linestyle:) plt.title(S-Curve Functions Comparison, pad15) plt.legend(fontsize12) plt.grid(True, alpha0.3) plt.axhline(0, colorblack, linewidth0.8) plt.axvline(0, colorblack, linewidth0.8) plt.show()S型曲线特性对比表特性SigmoidTanhArctan值域(0,1)(-1,1)(-π/2,π/2)零点导数0.2511计算复杂度指数运算双指数运算三角运算常见应用逻辑回归RNN强化学习5. 高级技巧与样式优化5.1 自定义样式与动画Matplotlib支持通过样式表和动画功能增强可视化效果plt.style.use(seaborn) # 使用seaborn主题 x np.linspace(0, 2*np.pi, 100) fig, ax plt.subplots(figsize(10, 6)) line, ax.plot(x, np.sin(x), r-, linewidth3) def update(frame): line.set_ydata(np.sin(x frame/10)) return line, from matplotlib.animation import FuncAnimation ani FuncAnimation(fig, update, frames100, interval50) plt.title(Animated Sine Wave) plt.show()5.2 3D函数曲面绘制对于二元函数Matplotlib支持3D可视化from mpl_toolkits.mplot3d import Axes3D 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)) fig plt.figure(figsize(12, 8)) ax fig.add_subplot(111, projection3d) ax.plot_surface(X, Y, Z, cmapviridis) ax.set_title(3D Function Surface: sin(sqrt(x²y²))) plt.show()3D绘图注意事项使用meshgrid创建坐标矩阵选择合适的colormap(cmap)增强可视化效果复杂3D图形可能需要较长的渲染时间6. 实用技巧与常见问题6.1 性能优化技巧当处理高密度数据点时这些方法可以提升绘图效率# 方法1降低采样密度 x_dense np.linspace(-10, 10, 10000) # 原始高密度数据 x_sparse x_dense[::20] # 每20个点取一个 # 方法2使用set_data动态更新而非重新绘图 fig, ax plt.subplots() line, ax.plot([], []) # 创建空线条 line.set_data(x_sparse, np.sin(x_sparse)) # 高效更新数据 # 方法3对于极大数据集考虑使用Datashader等专用库6.2 常见错误处理这些错误在函数绘图中经常遇到除以零错误x np.linspace(-1, 1, 100) # 错误方式y 1/x # 会导致x0处报错 # 正确方式 x_safe x[x ! 0] y 1/x_safe复数结果警告# 错误方式y np.sqrt(x) # x0时会产生复数 # 正确方式 y np.sqrt(x[x 0])图像显示异常# 确保在Jupyter中正确显示图像 %matplotlib inline # 或者在脚本中使用 plt.show()7. 完整代码整合将所有函数整合到一个可执行的Jupyter Notebook中# 导入部分 import numpy as np import matplotlib.pyplot as plt %matplotlib inline plt.style.use(ggplot) # 创建图形和子图布局 fig plt.figure(figsize(18, 24)) fig.suptitle(12 Essential Function Visualizations, y1.02, fontsize16) # 定义12个子图位置 ax1 plt.subplot(4, 3, 1) ax2 plt.subplot(4, 3, 2) # ... 继续定义ax3到ax12 # 绘制各个函数 x np.linspace(-5, 5, 500) ax1.plot(x, x, labelLinear) ax1.set_title(y x) x_sq np.linspace(-3, 3, 300) ax2.plot(x_sq, x_sq**2, labelQuadratic) ax2.set_title(y x²) # ... 继续绘制其他函数 plt.tight_layout() plt.savefig(all_functions.png, dpi300, bbox_inchestight) plt.show()Notebook使用建议将代码分单元格执行便于调试使用%%time魔法命令监测每个绘图单元的耗时重要参数设置单独单元格方便调整最终保存高分辨率图片(dpi300)用于报告或演示