news 2026/4/3 3:39:20

Matplotlib基础教程:折线图、柱状图、直方图绘制全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Matplotlib基础教程:折线图、柱状图、直方图绘制全解析

Matplotlib是Python生态中最核心的数据可视化库之一,凭借灵活的定制能力和简洁的语法,成为数据分析、科研绘图、报表制作的必备工具。本文将从实战角度出发,手把手教你掌握折线图、柱状图、直方图三种高频图表的绘制方法,覆盖基础语法、参数调整、样式优化等核心知识点,零基础也能快速上手。

一、前期准备:环境搭建与基础概念

1. 安装Matplotlib

确保已安装Python环境,通过pip命令快速安装Matplotlib:

pip install matplotlib

同时建议安装NumPy,用于生成示例数据:

pip install numpy

2. 核心模块与绘图逻辑

Matplotlib的绘图核心是pyplot模块,通常简写为plt。其基本绘图逻辑为:

  1. 导入模块:import matplotlib.pyplot as plt
  2. 准备数据:整理需要可视化的数值型数据
  3. 调用绘图函数(如plot()bar()):生成图表框架
  4. 调整样式(标题、标签、刻度等):提升图表可读性
  5. 显示/保存图表:plt.show()plt.savefig()

二、折线图:展示数据趋势变化

折线图适用于展示数据随时间、序列等维度的连续变化趋势,是最常用的趋势可视化图表。

1. 基础折线图绘制

示例:绘制某城市一周的气温变化趋势

importmatplotlib.pyplotaspltimportnumpyasnp# 1. 准备数据x=["周一","周二","周三","周四","周五","周六","周日"]# 横轴:星期y=[22,24,21,26,28,27,25]# 纵轴:气温(℃)# 2. 创建画布(可选,默认自动创建)plt.figure(figsize=(8,5))# 设置画布大小:宽8英寸,高5英寸# 3. 绘制折线图plt.plot(x,y,# x/y轴数据color="red",# 线条颜色linestyle="-",# 线条样式:实线(--为虚线,:为点线)linewidth=2,# 线条宽度marker="o",# 数据点标记:圆形(s为正方形,^为三角形)markersize=6)# 标记大小# 4. 添加图表元素plt.title("某城市一周气温变化趋势",fontsize=14)# 标题plt.xlabel("星期",fontsize=12)# 横轴标签plt.ylabel("气温(℃)",fontsize=12)plt.xticks(fontsize=10)# 横轴刻度字体大小plt.yticks(range(20,30,2),fontsize=10)# 纵轴刻度范围与步长plt.grid(alpha=0.3)# 添加网格,alpha控制透明度# 5. 显示图表plt.show()

2. 进阶:多折线对比

若需对比多组数据趋势(如最高温与最低温),多次调用plot()即可:

importmatplotlib.pyplotasplt# 数据准备x=["周一","周二","周三","周四","周五","周六","周日"]high_temp=[22,24,21,26,28,27,25]low_temp=[15,16,14,18,20,19,17]plt.figure(figsize=(8,5))# 绘制最高温折线plt.plot(x,high_temp,color="red",marker="o",label="最高温")# 绘制最低温折线plt.plot(x,low_temp,color="blue",marker="s",label="最低温")# 添加图例(需配合label参数)plt.legend(loc="upper right",fontsize=10)plt.title("某城市一周最高/最低气温对比",fontsize=14)plt.xlabel("星期")plt.ylabel("气温(℃)")plt.grid(alpha=0.3)plt.show()

三、柱状图:对比不同类别数据大小

柱状图(条形图)适用于对比不同类别、分组数据的数值大小,直观展示各类别间的差异。

1. 基础柱状图绘制

示例:对比不同产品的月度销量

importmatplotlib.pyplotasplt# 数据准备products=["产品A","产品B","产品C","产品D"]sales=[120,180,90,150]# 销量(件)plt.figure(figsize=(8,5))# 绘制柱状图bars=plt.bar(products,sales,width=0.6,# 柱子宽度color=["#FF6B6B","#4ECDC4","#45B7D1","#96CEB4"],# 自定义颜色edgecolor="black")# 柱子边框颜色# 为柱子添加数值标签forbarinbars:height=bar.get_height()plt.text(bar.get_x()+bar.get_width()/2,# 标签x坐标(柱子中心)height+2,# 标签y坐标(柱子顶部+偏移)str(height),# 标签内容ha="center",fontsize=10)# 水平居中plt.title("月度产品销量对比",fontsize=14)plt.xlabel("产品类别")plt.ylabel("销量(件)")plt.ylim(0,200)# 纵轴范围,避免标签超出图表plt.show()

2. 进阶:分组柱状图

若需对比同一类别在不同维度的数据(如2023和2024年各产品销量),可绘制分组柱状图:

importmatplotlib.pyplotaspltimportnumpyasnp# 数据准备products=["产品A","产品B","产品C","产品D"]sales_2023=[120,180,90,150]sales_2024=[150,160,110,170]x=np.arange(len(products))# 生成x轴位置:[0,1,2,3]width=0.35# 每组柱子宽度plt.figure(figsize=(8,5))# 绘制2023年销量柱子plt.bar(x-width/2,sales_2023,width,label="2023年",color="#FF6B6B")# 绘制2024年销量柱子plt.bar(x+width/2,sales_2024,width,label="2024年",color="#4ECDC4")# 调整x轴刻度与标签plt.xticks(x,products)plt.legend(fontsize=10)plt.title("2023-2024年产品销量对比",fontsize=14)plt.xlabel("产品类别")plt.ylabel("销量(件)")plt.show()

四、直方图:展示数据分布特征

直方图与柱状图易混淆,但核心用途不同:直方图用于展示连续数据的分布情况(如身高、分数、销售额的分布),横轴为数据区间,纵轴为区间内的频数/频率。

1. 基础直方图绘制

示例:分析1000名学生的数学成绩分布

importmatplotlib.pyplotaspltimportnumpyasnp# 生成模拟数据:均值75,标准差10的正态分布成绩np.random.seed(42)# 固定随机种子,保证结果可复现scores=np.random.normal(75,10,1000)scores=np.clip(scores,0,100)# 限制成绩范围0-100plt.figure(figsize=(8,5))# 绘制直方图n,bins,patches=plt.hist(scores,bins=10,# 区间数量(组数)range=(0,100),# 数据范围color="#45B7D1",edgecolor="black",alpha=0.7)# 添加数值标签foriinrange(len(n)):plt.text((bins[i]+bins[i+1])/2,# 区间中心x坐标n[i]+5,# 频数y坐标+偏移int(n[i]),# 频数(取整)ha="center",fontsize=9)plt.title("1000名学生数学成绩分布",fontsize=14)plt.xlabel("成绩区间")plt.ylabel("人数(频数)")plt.grid(axis="y",alpha=0.3)# 仅显示y轴网格plt.show()

2. 关键参数说明

  • bins:组数,可指定具体区间(如bins=[0,60,70,80,90,100]),也可指定数量;
  • density:若设为True,纵轴显示频率(概率密度)而非频数;
  • range:限定数据范围,超出范围的数据会被忽略。

五、通用优化技巧

  1. 中文显示问题:若图表中中文乱码,添加以下代码:
plt.rcParams["font.sans-serif"]=["SimHei"]# Windows系统# plt.rcParams["font.sans-serif"] = ["PingFang SC"] # macOS系统plt.rcParams["axes.unicode_minus"]=False# 解决负号显示问题
  1. 保存图表:用plt.savefig()替代plt.show(),可保存高清图片:
plt.savefig("气温趋势.png",dpi=300,bbox_inches="tight")# dpi控制分辨率,bbox_inches裁剪空白
  1. 样式预设:Matplotlib提供多种预设样式,可通过plt.style.use()调用:
plt.style.use("ggplot")# 仿R语言ggplot2样式plt.style.use("seaborn-v0_8")# 仿seaborn样式
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/3 2:44:37

2025年工业路由器选型推荐:销量冠军蒲公英R300系列

在工业4.0与数字化转型的宏大叙事中,稳定可靠的网络连接是支撑智能制造、远程运维与数据智能的无声基石。然而,工厂车间、户外能源站、偏远矿山等复杂工业环境,对网络设备提出了极端严苛的要求:不仅要抵御粉尘、潮湿、高低温的物理…

作者头像 李华
网站建设 2026/3/21 15:54:54

CFCA谢宗晓介绍“基于一图四库的网络安全产品服务”

12月4日下午,“2025企业家博鳌论坛-数字金融安全发展大会暨数字金融联合宣传年年度活动”在海南博鳌举行,大会由新华网主办,以“数聚新势 智汇金融”为主题,围绕金融科技突破、数字安全、数字金融创新、金融高质量发展等核心命题展…

作者头像 李华
网站建设 2026/4/2 5:30:27

9 个继续教育论文工具,AI 降重查重率推荐

9 个继续教育论文工具,AI 降重查重率推荐 论文写作的困局:时间、重复率与效率的三重挑战 对于继续教育领域的学生来说,撰写毕业论文往往是一场艰难的战役。从选题到文献综述,从大纲构建到内容撰写,每一个环节都充满了挑…

作者头像 李华
网站建设 2026/3/30 2:13:22

基于Matlab的永磁同步电机磁场定向控制仿真模型探索

基于matlab的永磁同步电机(PMSM),磁场定向控制仿真模型。 永磁同步电机(PMSM)是一个非线性系统,具有多变量、强耦合的特点。永磁同步电机(PMSM)可是个很有意思的东西,它属于非线性系统&#xff…

作者头像 李华
网站建设 2026/3/21 12:30:37

Conda虚拟环境配置Qwen-Image-Edit-2509全流程教程

Conda虚拟环境配置Qwen-Image-Edit-2509全流程实践 在电商运营、社交媒体内容批量生成等高频视觉更新场景中,设计师每天面对成百上千张图片的重复修改——改价格、换标语、调背景色……这些看似简单的任务,却消耗着大量人力与时间。有没有可能让AI听懂“…

作者头像 李华
网站建设 2026/3/14 8:51:39

Fedora , Linux 创始人 Linus 的选择 —— 目前他生活在加拿大

https://www.fedoraproject.org/ 视频为证 —— Linus 安装在自己的电脑上的 Linux版本是 Fedora https://www.reddit.com/r/Fedora/comments/1pb8lgz/linus_torvalds_explains_why_he_uses_fedora_linux/ Atomic Desktops The Fedora desktop experiences you know with an …

作者头像 李华