Python 数据可视化绘图基础与实战指南
1. 二维图像绘制
1.1 二维曲线图
Matplotlib 是 Python 中最常用的绘图库, 函数用于绘制线性图表。
本文详细介绍了基于 Matplotlib 库的 Python 数据可视化方法。涵盖二维曲线、散点图、柱状图及三维曲面图的绘制技巧,包括坐标轴控制、刻度格式设置、多窗格布局等核心功能。内容还补充了常用图表类型,并针对中文显示乱码、图片保存分辨率等常见问题提供解决方案。通过丰富的代码示例,帮助读者快速掌握科学计算数据的图形化表达,适用于数据分析、科研绘图及工程演示场景。

Matplotlib 是 Python 中最常用的绘图库, 函数用于绘制线性图表。
plot()基本语法:
plt.plot(x, y, ls="-", lw=1.5, label=None)
x, y:横坐标和纵坐标数组。ls (linestyle):线型。例如 'r*-' 表示红色实线加星号标记。lw (linewidth):线宽。label:图例标签。参数详解:
b(蓝), g(绿), r(红), c(青), m(紫), y(黄), k(黑), w(白)。也可用十六进制色值。.(点), o(圆), v(下三角), ^(上三角), s(方块), p(五边形), *(星号) 等。-(实线), --(虚线), -.(点划线), :(点线)。代码示例:
import numpy as np
import matplotlib.pyplot as plt
# 设置中文字体支持
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.arange(0, 12, 0.3)
y1 = np.sin(x)
y2 = np.cos(x)
plt.figure(figsize=(10, 6)) # 指定画布大小
plt.subplot(1, 2, 1)
plt.plot(x, y1, 'r*-')
plt.title("正弦曲线")
plt.xlabel('x 轴')
plt.ylabel('y 轴')
plt.grid(True)
plt.legend(['sin(x)'])
plt.subplot(1, 2, 2)
plt.plot(x, y1, 'r*-', label='sinx')
plt.plot(x, y2, 'g.--', label='cosx')
plt.title('正弦与余弦对比')
plt.legend()
plt.tight_layout()
plt.show()
散点图用于展示两个变量之间的关系或分布情况。
基本语法:
plt.scatter(x, y, s=20, c='b', marker='o', cmap=None, alpha=1.0)
s:点的面积(像素平方)。c:点的颜色,可传单个颜色或数组。cmap:当 c 为数值时,指定颜色映射表(如 'viridis', 'rainbow')。alpha:透明度,范围 0~1。代码示例:
size = 100
x = np.random.uniform(size=size)
y = np.random.uniform(size=size)
s = np.random.uniform(5, 400, size=size)
c = np.random.uniform(size=size)
lw = np.random.uniform(1, 4, size=size)
plt.figure()
plt.subplot(1, 2, 1)
plt.scatter(x, y, s=s, c=c, alpha=0.5, linewidths=lw, edgecolors='m')
plt.title("带边框的散点图")
plt.subplot(1, 2, 2)
plt.scatter(x, y, s=s, c=c, cmap='rainbow', alpha=0.5)
plt.title("彩色映射散点图")
plt.colorbar(label='Value')
plt.show()
除了曲线和散点,柱状图和饼图也是数据可视化的基础。
柱状图 (Bar Chart):
plt.bar(x, height, width=0.8, color='blue', label='Data')
饼图 (Pie Chart):
labels = ['A', 'B', 'C']
sizes = [30, 40, 30]
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
通过控制坐标轴、刻度和网格,可以优化图表的可读性。
figure(num, figsize, dpi) 创建新窗口。title(), xlabel(), ylabel()。xlim(), ylim(), axis()。xticks(ticks, labels), yticks()。vlines(), hlines()。text(x, y, s)。subplot(rows, cols, num)。savefig(name, dpi),支持 png, pdf, svg 等格式。刻度间隔控制:
使用 MultipleLocator 精确控制主刻度间隔。
from matplotlib.pyplot import MultipleLocator
ax = plt.gca()
ax.xaxis.set_major_locator(MultipleLocator(3.14))
刻度格式控制:
使用 FormatStrFormatter 格式化显示数字。
from matplotlib.ticker import FormatStrFormatter
ax.yaxis.set_major_formatter(FormatStrFormatter('%.1f'))
绘制三维图需导入 Axes3D 模块。
创建方法:
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
注意:即使不直接使用 Axes3D 类,也需导入该模块以注册投影类型。
t = np.linspace(0, 20, 70)
x = np.sin(t)
y = np.cos(t)
z = 2 * t
ax.plot(x, y, z, 'r*-')
size = 150
x = np.random.randint(0, 30, size)
y = np.random.randint(0, 30, size)
z = np.random.randint(0, 30, size)
ax.scatter(x, y, z, s=50, c='r', alpha=0.8)
曲面图常用于展示函数 $z = f(x, y)$ 的形态。
核心步骤:
np.meshgrid()。plot_surface()。x = np.linspace(0, 10, 50)
y = np.linspace(0, 9, 45)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.cos(Y)
fig = plt.figure()
ax = fig.add_subplot(1, 2, 1, projection='3d')
ax.plot_surface(X, Y, Z, cmap='hot')
ax = fig.add_subplot(1, 2, 2, projection='3d')
ax.plot_surface(X, Y, Z, cmap='rainbow')
plt.show()
Matplotlib 默认不支持中文,需配置字体。
plt.rcParams['font.sans-serif'] = ['SimHei'] # Windows
# Linux/Mac 可能需要 'Arial Unicode MS' 或 'DejaVu Sans'
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示为方块问题
使用高分辨率保存适合出版或演示。
plt.savefig('output.png', dpi=300, bbox_inches='tight')
bbox_inches='tight' 可去除多余空白边距。
对于大规模数据(超过 10 万点),建议使用 scatter 的 antialiased=False 选项或降低采样率以提升渲染速度。
本文系统讲解了 Matplotlib 在二维及三维绘图中的应用。从基础的曲线绘制到复杂的曲面展示,涵盖了坐标轴控制、样式定制及常见问题的解决方案。掌握这些技能将显著提升数据分析结果的直观性与专业性。在实际项目中,建议结合 Pandas 进行数据预处理,利用 Seaborn 进行更高级的统计绘图,构建完整的数据分析工作流。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online