news 2026/10/1 5:20:24

Python数据分析可视化:Matplotlib实训

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python数据分析可视化:Matplotlib实训

📈 实训揭秘:用 Matplotlib 画出“会说话”的函数图!

❝

你以为数学公式只会躺在课本里?
不!它们也能在屏幕上“跳舞”——只要你会用 Matplotlib!

今天咱们来玩点“硬核”的:
看懂一张图,写出一段代码,把抽象的数学函数变成有注释、有箭头、有水印的精美图表!

这不仅是练习,更是对 Matplotlib 核心功能的全面实战演练。
别急着划走,看完你也能画出“老板看了想收藏”的图!


🎯 实训目标

给定如下两个图像样式,要求写出对应的绘图代码:


(左图:高频率正弦波 + 局部最大值标注;右图:标准正弦曲线 + 注释与水印)

我们不仅要复现图形,更要理解每一行代码背后的“设计意图”。


✅ 第一步:导入库 & 设置字体

import matplotlib.pyplot as plt import numpy as np plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体显示中文 plt.rcParams['axes.unicode_minus'] = False # 正常显示负号 %matplotlib inline
❝

💡 小贴士:如果你的图中出现“方框”或乱码,大概率是字体没设置好。SimHei是 Windows 上常用的中文字体,Mac 用户可以用'PingFang SC'或'STHeiti'。


🖼️ 第二步:创建画布和子图

fig = plt.figure() ax1 = fig.add_subplot(121) # 左边图:1行2列第1个 ax2 = fig.add_subplot(122) # 右边图:1行2列第2个
❝

🌰 生活类比:就像你在做 PPT,一页放两个小图,左边讲“快节奏”,右边讲“慢工出细活”。


🌀 图一:y = sin(2πt) —— 高频振荡的“心跳”

t = np.arange(0.0, 5, 0.01) # 时间从0到5,步长0.01 s = np.sin(2 * np.pi * t) # 计算sin(2πt) ax1.plot(t, s, lw=2) # 绘制曲线,线宽为2

🔍 添加局部最大值标注

bbox = dict(boxstyle='round', fc='white') # 白色圆角框 plt.annotate('local max', xy=(2.3, 1), # 箭头指向点 xytext=(3, 1.5), # 文字位置 arrowprops=dict(facecolor='black', edgecolor='red', headwidth=7, width=2), bbox=bbox)
❝

✅ 解读:

  • xy:箭头起点(即曲线上某点)

  • xytext:文本框位置

  • arrowprops:控制箭头样式(黑色填充、红色边框、粗箭头)

  • bbox:文本框样式(白色背景、圆角)

📝 添加标题与坐标轴标签

ax1.set_ylabel('Y', fontsize=12) ax1.set_xlabel('X', fontsize=12) ax1.set_ylim(-2, 2) # y轴范围

✍️ 手写公式说明

ax1.text(1, 1.2, 'max', fontsize=18) ax1.text(1.2, -1.8, '$ y = sin(2 * np.pi * t) $', bbox=bbox, rotation=10, alpha=0.8)
❝

🌟 注意:

  • $...$表示 LaTeX 数学公式

  • rotation=10:让文字倾斜一点,更自然

  • alpha=0.8:透明度,避免遮挡曲线


🌊 图二:y = sin(x) —— 平稳优雅的“呼吸”

x = np.linspace(0, 10, 200) # 0到10之间生成200个点 y = np.sin(x) ax2.plot(x, y, linestyle='-.', color='purple') # 虚点线,紫色
❝

🎨 颜色建议:purple很适合“神秘感”场景,比如宇宙、哲学、深夜加班……

🎯 添加关键点注释:“Here I am”

ax2.annotate(text='Here I am', xy=(4.8, np.sin(4.8)), # 指向最低点 xytext=(3.7, -0.2), weight='bold', color='k', arrowprops=dict(arrowstyle='-|>', connectionstyle='arc3', color='red'), bbox=dict(boxstyle='round', pad=0.5, fc='yellow', ec='k', lw=1), alpha=0.8)
❝

🧠 重点解析:

  • arrowstyle='-|>':箭头是实线加竖线结尾(像“靶心”)

  • connectionstyle='arc3':弯曲路径,更美观

  • pad=0.5:增加文本框内边距

  • fc='yellow':黄色背景,突出显示

⚙️ 设置坐标轴范围

ax2.set_ylim(-1.5, 1.5) ax2.set_xlim(0, 10)
❝

🛠️ 这样可以让图像比例协调,不会“挤”或“空”。


🎨 最后一步:美化与水印

🔹 添加网格线

ax2.grid(ls=":", color='gray', alpha=0.5)
❝

✅ 点状虚线网格,轻盈不抢戏,提升可读性。

🔹 添加带方框的水印

ax2.text(4.5, 1, 'NWNNU', fontsize=15, alpha=0.3, color='gray', bbox=dict(fc='white', boxstyle='round', edgecolor='gray', alpha=0.3))
❝

🌐 水印技巧:

  • alpha=0.3:半透明,不影响主体

  • fc='white':白色背景,防止文字被线条遮挡

  • boxstyle='round':圆角边框,柔和不刺眼


🎉 完整代码汇总(直接复制可用)

import matplotlib.pyplot as plt import numpy as np plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False %matplotlib inline fig = plt.figure() ax1 = fig.add_subplot(121) t = np.arange(0.0, 5, 0.01) s = np.sin(2 * np.pi * t) ax1.plot(t, s, lw=2) bbox = dict(boxstyle='round', fc='white') plt.annotate('local max', xy=(2.3, 1), xytext=(3, 1.5), arrowprops=dict(facecolor='black', edgecolor='red', headwidth=7, width=2), bbox=bbox) ax1.set_ylabel('Y', fontsize=12) ax1.set_xlabel('X', fontsize=12) ax1.set_ylim(-2, 2) ax1.text(1, 1.2, 'max', fontsize=18) ax1.text(1.2, -1.8, '$ y = sin(2 * np.pi * t) $', bbox=bbox, rotation=10, alpha=0.8) ax2 = fig.add_subplot(122) x = np.linspace(0, 10, 200) y = np.sin(x) ax2.plot(x, y, linestyle='-.', color='purple') ax2.annotate(text='Here I am', xy=(4.8, np.sin(4.8)), xytext=(3.7, -0.2), weight='bold', color='k', arrowprops=dict(arrowstyle='-|>', connectionstyle='arc3', color='red'), bbox=dict(boxstyle='round', pad=0.5, fc='yellow', ec='k', lw=1), alpha=0.8) ax2.set_ylim(-1.5, 1.5) ax2.set_xlim(0, 10) bbox = dict(boxstyle='round', ec='red', fc='white') ax2.text(6, -1.9, '$ y = sin(x) $', bbox=dict(boxstyle='square', facecolor='white', ec='black')) ax2.grid(ls=":", color='gray', alpha=0.5) ax2.text(4.5, 1, 'NWNNU', fontsize=15, alpha=0.3, color='gray', bbox=dict(fc='white', boxstyle='round', edgecolor='gray', alpha=0.3)) plt.show()

🧩 学到了什么?

功能

关键词

多图并排

add_subplot(121)

/122

标注文字

annotate()

箭头样式

arrowprops

,arrowstyle

文本框

bbox

,boxstyle

公式渲染

$...$

中文支持

SimHei

,unicode_minus=False

水印

text()

+ 半透明 + 边框


🚀 结语:你的数据,也可以这么“会说话”

从一条简单的正弦曲线,到充满细节的标注与水印,
Matplotlib 的强大之处正在于——它不只是画图,更是讲故事。

下次当你看到一个“看不懂但很酷”的图表时,
不妨想想:
“这个图背后,是不是也藏着一行行精心设计的代码?”


📌关注我们,下期带你用 Seaborn 一键生成“论文级”图表!

❝

💬 如果你觉得这篇实训解析对你有帮助,欢迎点赞+转发,让更多同学少走弯路!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 7:02:48

CLAP Dashboard从零部署:conda环境隔离+torch 2.1+transformers 4.41兼容性验证

CLAP Dashboard从零部署:conda环境隔离torch 2.1transformers 4.41兼容性验证 1. 这不是另一个音频分类工具,而是一次“开箱即用”的零样本体验 你有没有试过上传一段街头录音,想快速知道里面有没有汽车鸣笛、婴儿哭声或雨声,却…

作者头像 李华
网站建设 2026/9/28 21:43:35

PyTorch-2.x镜像部署全流程,附详细截图和命令

PyTorch-2.x镜像部署全流程,附详细截图和命令 你是否还在为每次搭建深度学习环境反复安装CUDA、配置源、调试依赖而头疼?是否经历过“本地能跑,服务器报错”的经典困境?本文将带你用最直接的方式,完成PyTorch-2.x通用…

作者头像 李华
网站建设 2026/9/29 19:14:40

Z-Image-Turbo批量生成对比墙,效果一目了然

Z-Image-Turbo批量生成对比墙,效果一目了然 Z-Image-Turbo不是又一个“跑得快”的文生图模型——它是少数真正把“快”转化为“直观可比、高效决策”的工具。当你需要在10秒内生成20张不同风格的海报方案、为同一产品测试5种视觉调性、或向客户同步展示提示词微调带…

作者头像 李华
网站建设 2026/9/30 9:45:12

从崩溃到启动:Expo应用的导航优化实践

在移动应用开发中,导航是用户体验的关键部分,尤其是在使用React Native和Expo构建应用时。然而,很多开发者在将应用从开发环境转换到生产环境时,可能会遇到一些意想不到的问题。本文将通过一个实际案例,探讨如何解决Expo应用在导航库集成时出现的崩溃问题。 问题背景 最…

作者头像 李华
网站建设 2026/9/30 9:40:09

为什么VibeThinker-1.5B适合教育场景?案例分享

为什么VibeThinker-1.5B适合教育场景?案例分享 在教育数字化加速推进的今天,一线教师和教研人员常面临一个现实困境:AI工具不少,但真正能“讲清一道题”“陪练一整套逻辑”的却寥寥无几。大模型回答泛泛而谈、步骤跳跃、术语堆砌…

作者头像 李华