news 2026/6/15 13:04:18

Day 50:【99天精通Python】数据可视化 Matplotlib 基础 - 绘图入门

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Day 50:【99天精通Python】数据可视化 Matplotlib 基础 - 绘图入门

Day 50:【99天精通Python】数据可视化 Matplotlib 基础 - 绘图入门

前言

欢迎来到第50天!

“一图胜千言”。在数据分析中,无论你的数据处理得多完美,如果不能用直观的图表展示出来,老板和客户是看不懂的。

Matplotlib是 Python 最基础、最强大的绘图库。它是许多高级可视化库(如 Seaborn, Pandas Plot)的底层。虽然它的默认样式稍微有点"理工男审美"(朴素),但只要稍加配置,它也能画出出版级的高质量图表。

本节内容:

  • Matplotlib 画图逻辑 (Figure, Axes)
  • 绘制折线图 (Line Plot)
  • 绘制散点图 (Scatter Plot)
  • 绘制饼图 (Pie Chart)
  • 设置标题、标签、图例、网格
  • 保存图片

一、画图的逻辑:画布与坐标系

很多初学者容易被plt.plotax.plot搞晕。我们先理清概念:

  1. Figure (画布):整个图片的底板。
  2. Axes (坐标系):画布上的一块区域,我们在这里画图(包含 x轴、y轴、标题等)。一张画布可以有多个坐标系(子图)。
importmatplotlib.pyplotaspltimportnumpyasnp# 1. 创建画布 (宽8英寸,高6英寸)fig=plt.figure(figsize=(8,6))# 2. 创建坐标系 (111 表示 1行1列的第1个子图)ax=fig.add_subplot(111)# 3. 画图x=[1,2,3,4]y=[10,20,15,30]ax.plot(x,y)# 4. 显示plt.show()

简便写法:如果只有一张图,可以直接用plt.plot(),它会自动创建 Figure 和 Axes。


二、折线图 (Line Plot)

折线图最适合展示趋势(如股票走势、气温变化)。

x=np.linspace(0,10,100)y=np.sin(x)plt.figure(figsize=(10,5))# plot(x, y, 格式字符串, label=...)# 'r--': 红色(red) 虚线(dashed)plt.plot(x,y,'r--',label='Sin Wave')# 再画一条 cos 曲线plt.plot(x,np.cos(x),'b-',label='Cos Wave')# 设置细节plt.title("Sin & Cos Function")plt.xlabel("Time (s)")plt.ylabel("Value")plt.legend()# 显示图例 (label)plt.grid(True)# 显示网格plt.show()

三、散点图 (Scatter Plot)

散点图用于观察两个变量之间的关系(如身高与体重、房价与面积)。

# 生成 50 个随机点x=np.random.rand(50)y=np.random.rand(50)colors=np.random.rand(50)# 随机颜色sizes=np.random.rand(50)*100# 随机大小plt.scatter(x,y,c=colors,s=sizes,alpha=0.5)# alpha 透明度plt.title("Random Scatter")plt.show()

四、饼图 (Pie Chart)

饼图用于展示占比

labels=['Python','Java','C++','Go']sizes=[45,30,15,10]explode=(0.1,0,0,0)# 突出显示第一块 (Python)plt.pie(sizes,labels=labels,explode=explode,autopct='%1.1f%%',# 显示百分比shadow=True,startangle=90)plt.axis('equal')# 保证饼图是圆的,不是扁的plt.title("Programming Language Share")plt.show()

五、中文显示问题 (复习)

Matplotlib 默认不支持中文,需要手动设置字体。

# Windowsplt.rcParams['font.sans-serif']=['SimHei']# Mac# plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']plt.rcParams['axes.unicode_minus']=False# 解决负号显示问题plt.plot([1,2,3],[10,20,30])plt.title("中文标题测试")plt.show()

六、多子图 (Subplots)

在一张画布上画多张图。

x=np.linspace(0,10,100)# 创建 2行1列 的布局fig,axes=plt.subplots(2,1,figsize=(8,8))# 第1张图 (axes[0])axes[0].plot(x,np.sin(x),'r')axes[0].set_title("Sin")# 第2张图 (axes[1])axes[1].plot(x,np.cos(x),'b')axes[1].set_title("Cos")plt.tight_layout()# 自动调整间距,防止重叠plt.show()

七、保存图片

plt.plot(x,y)# dpi: 分辨率 (dots per inch),越高越清晰plt.savefig("my_plot.png",dpi=300)

八、实战练习:股票走势图

模拟一支股票 10 天的收盘价,绘制折线图,并标出最高点。

days=range(1,11)prices=[10,12,11,14,13,16,18,15,19,22]plt.figure(figsize=(10,6))plt.plot(days,prices,marker='o',linestyle='-',color='g')# 标注最高点max_price=max(prices)max_day=days[prices.index(max_price)]# annotate(文本, xy=目标点, xytext=文字位置, arrowprops=箭头样式)plt.annotate(f'Peak:{max_price}',xy=(max_day,max_price),xytext=(max_day-2,max_price+2),arrowprops=dict(facecolor='red',shrink=0.05))plt.title("Stock Price Trend")plt.xlabel("Day")plt.ylabel("Price ($)")plt.grid(True)plt.show()

九、小结

Matplotlib 绘图

基本流程

图表类型

美化配置

Figure (画布)

Axes (坐标系)

show() / savefig()

plot (折线)

scatter (散点)

bar (柱状 - 见Day36)

pie (饼图)

title / xlabel / ylabel

legend (图例)

grid (网格)

中文支持

关键要点

  1. 简单图用plt.xxx,复杂多子图用fig, ax = plt.subplots()
  2. 记住常用的图表类型:趋势看折线,占比看饼图,关系看散点,对比看柱状。
  3. 遇到中文乱码别慌,设置font.sans-serif

十、课后作业

  1. 成绩分布图:随机生成 100 个 0-100 的学生成绩,绘制直方图 (Histogram)查看分数分布情况(提示:plt.hist)。
  2. 双轴图:在同一张图上,左边 Y 轴显示"销售额"(柱状图),右边 Y 轴显示"增长率"(折线图)。(提示:ax.twinx())。
  3. 函数绘制:绘制y=x2y = x^2y=x2y=x3y = x^3y=x3的图像,设置不同的颜色和线型,并添加图例。

下节预告

Day 51:数据可视化 Seaborn 进阶- Matplotlib 写起来代码太多?Seaborn 基于 Matplotlib,能用更少的代码画出更漂亮、更统计学专业的图表(如热力图、箱线图)。


系列导航

  • 上一篇:Day 49 - Pandas进阶
  • 下一篇:Day 51 - 数据可视化Seaborn进阶(待更新)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 11:21:57

FSMN VAD跨平台尝试:Windows系统部署可行性分析

FSMN VAD跨平台尝试:Windows系统部署可行性分析 1. 引言 1.1 技术背景与业务需求 语音活动检测(Voice Activity Detection, VAD)是语音信号处理中的关键前置模块,广泛应用于语音识别、会议转录、电话录音分析、音频剪辑等场景。…

作者头像 李华
网站建设 2026/6/15 11:24:39

实测Z-Image-Turbo 1步出图,质量竟然这么高?

实测Z-Image-Turbo 1步出图,质量竟然这么高? 1. 背景与目标 阿里通义推出的 Z-Image-Turbo 是一款基于扩散模型架构的高性能图像生成系统,主打“极速推理、高质量输出”的核心优势。其最大亮点在于支持仅用1步推理即可生成视觉效果出色的图…

作者头像 李华
网站建设 2026/6/13 7:55:01

Z-Image-Base生成多样性不足?采样参数调优教程

Z-Image-Base生成多样性不足?采样参数调优教程 1. 背景与问题提出 在使用阿里最新开源的文生图大模型 Z-Image-Base 进行图像生成时,许多用户反馈:尽管模型具备强大的语义理解与中文支持能力,但在默认配置下生成的图像存在多样性…

作者头像 李华
网站建设 2026/6/15 11:23:44

从单机到分布式:HY-MT1.5-7B扩展部署策略

从单机到分布式:HY-MT1.5-7B扩展部署策略 随着多语言交流需求的不断增长,高质量、低延迟的翻译服务成为智能应用的核心能力之一。混元翻译模型(HY-MT)系列作为面向多语言互译场景的先进模型,已在多个国际评测中展现出…

作者头像 李华
网站建设 2026/6/15 11:23:42

Qwen3-0.6B微调入门:云端GPU免环境,3步完成训练

Qwen3-0.6B微调入门:云端GPU免环境,3步完成训练 你是不是也遇到过这样的情况:想动手练一练大模型微调,结果公司GPU排队排到下周,自己笔记本跑PyTorch直接卡成幻灯片?别急,今天我来给你支个招—…

作者头像 李华
网站建设 2026/6/15 12:19:35

开发者入门必看:通义千问2.5-7B-Instruct镜像快速上手教程

开发者入门必看:通义千问2.5-7B-Instruct镜像快速上手教程 1. 引言 随着大模型技术的快速发展,越来越多开发者希望在本地或私有环境中部署高性能、可商用的语言模型。通义千问2.5-7B-Instruct作为阿里于2024年9月发布的Qwen2.5系列中的核心成员&#xf…

作者头像 李华