news 2026/6/9 16:44:38

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/6 11:48:22

请求成功率,才是容易被忽略的核心指标

如果你做过新闻采集,大概率遇到过这样的场景: 代理买了不少并发开得也不低日志里请求数量看起来很“健康”但真正入库的新闻数据却少得可怜 很多人第一反应是: 是不是新闻站点反爬太狠了? 但在实际工程里,真正的问题…

作者头像 李华
网站建设 2026/6/5 4:00:09

[spring cloud] nacos注册中心和配置中心

1. Nacos 作为服务注册中心 (Service Registry) 1.1 核心原理 Nacos 作为注册中心,主要维护一张“服务列表”。 服务注册 (Registration): 服务提供者(Provider)启动时,会通过 REST API 发送请求向 Nacos Server 注册自己的信息&a…

作者头像 李华
网站建设 2026/6/6 7:05:06

Qwen3-Embedding-0.6B产品创新:用户反馈语义分析驱动迭代

Qwen3-Embedding-0.6B产品创新:用户反馈语义分析驱动迭代 1. 背景与技术演进 随着大模型在搜索、推荐、内容理解等场景的广泛应用,高质量文本嵌入(Text Embedding)能力成为构建智能系统的核心基础。传统的通用语言模型虽具备一定…

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

基于Keil uVision5的电机控制程序设计:完整指南

基于Keil uVision5的电机控制程序设计:从零构建高效实时系统你有没有遇到过这样的场景?电机嗡嗡作响,转速不稳,电流波形像心电图一样跳动——而你盯着示波器和代码,却找不到问题出在哪里。在嵌入式电机控制开发中&…

作者头像 李华
网站建设 2026/6/5 20:24:27

fft npainting lama实战教程:分区域修复复杂图像的策略

fft npainting lama实战教程:分区域修复复杂图像的策略 1. 学习目标与前置知识 本文旨在为开发者和图像处理爱好者提供一份完整的 fft npainting lama 图像修复系统 实战指南。通过本教程,您将掌握: 如何部署并启动基于 fft npainting lam…

作者头像 李华
网站建设 2026/6/5 15:10:27

终极指南:GTA5 YimMenu菜单工具完整使用教程

终极指南:GTA5 YimMenu菜单工具完整使用教程 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu …

作者头像 李华