当前位置:

首页 > 编程开发 > Python使用Matplotlib绘制基础可视化图表的完整指南

Python使用Matplotlib绘制基础可视化图表的完整指南

Matplotlib是Python数据可视化核心工具,支持折线图、柱状图、饼图、散点图、直方图、箱线图、热力图和雷达图等常见图表。通过示例代码和数据,展示了各图表的绘制方法、中文显示设置及网格线、标签等要素。

在数据可视化领域,Matplotlib可以说是Python生态中最基础但也最核心的工具之一。无论你是想快速生成一张报表图,还是想为论文或演示准备专业的可视化素材,它都能帮你搞定柱状图、折线图、饼图、散点图、直方图、箱线图、热力图、雷达图等一系列常见图表。

当然,开始之前得先把Matplotlib装上。如果还没装,直接来一句:

pip install matplotlib

装好之后,咱们就一个一个来。

1. 折线图 (Line Chart)

折线图的拿手好戏,是展示数据随时间变化的趋势。比如上半年的销售额,放在折线图上一目了然。

import matplotlib.pyplot as plt

# 解决中文显示问题 (Windows系统使用SimHei,Mac系统可换成PingFang SC)
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# 准备数据
months = ["1月", "2月", "3月", "4月", "5月", "6月"]
sales =[78,85,74,95,84,80]

# 绘制折线图
plt.figure(figsize=(8, 5))  # 设置画布大小
plt.plot(months, sales, marker="o", color="blue", linewidth=2, label="销售额")

# 添加标题和标签
plt.title("上半年销售额趋势")
plt.xlabel("月份")
plt.ylabel("销售额(元)")
plt.legend()  # 显示图例
plt.grid(True, linestyle="--", alpha=0.5)  # 添加网格线

plt.show()

效果图:

Python使用Matplotlib绘制基础可视化图表的完整指南

2. 柱状图 (Bar Chart)

想比较不同产品之间的销量?柱状图是最直观的选择。它就像把一堆数据摆在你面前,高矮立现。

import matplotlib.pyplot as plt

# 解决中文显示问题
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# 准备数据
products = ["手机", "电脑", "耳机", "平板", "手表"]
sales =[78,85,74,95,84]

# 绘制柱状图
plt.figure(figsize=(8, 5))
plt.bar(products, sales, color="orange", width=0.6)

# 在柱子顶部添加具体的数值标签
for index, value in enumerate(sales):
    plt.text(index, value + 10, str(value), ha="center")

# 添加标题和标签
plt.title("不同产品销量对比")
plt.xlabel("产品")
plt.ylabel("销量")

plt.show()

效果图:

Python使用Matplotlib绘制基础可视化图表的完整指南

3. 饼图 (Pie Chart)

饼图的强项在于展示占比——谁在整体中占据多大一块,一目了然。比如用户来源渠道,用饼图呈现最合适不过。

import matplotlib.pyplot as plt

# 解决中文显示问题
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# 准备数据
channels = ["搜索引擎", "短视频", "社交媒体", "直接访问", "邮件"]
users =[1000, 500, 300, 400, 200]

# 绘制饼图
plt.figure(figsize=(7, 7))
plt.pie(
    users, 
    labels=channels, 
    autopct="%.1f%%",  # 显示百分比,并保留1位小数
    startangle=90,     # 设置饼图起始角度
    counterclock=False # 按顺时针方向绘制
)

plt.title("用户来源占比")
plt.show()

效果图

Python使用Matplotlib绘制基础可视化图表的完整指南

4. 散点图 (Scatter Plot)

散点图是用来观察两个变量之间是否存在关联的利器。测试数据模拟了100名学生的“每日学习时长”与“期末考试成绩”,用来判断两者是否存在正相关。

import matplotlib.pyplot as plt
import numpy as np

# 设置中文显示
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# 生成测试数据:100个学生的学习时长(1-8小时)和对应的成绩
np.random.seed(42) # 固定随机种子,保证每次运行结果一致
study_hours = np.random.uniform(1, 8, 100)
# 成绩 = 学习时长 * 8 + 基础分40 + 随机波动
scores = study_hours * 8 + 40 + np.random.normal(0, 5, 100)

# 绘制散点图
plt.figure(figsize=(8, 5))
plt.scatter(study_hours, scores, color="skyblue", edgecolors="black", alpha=0.7)

plt.title("学习时长与考试成绩的关系", fontsize=14)
plt.xlabel("每日学习时长 (小时)")
plt.ylabel("考试成绩 (分)")
plt.grid(True, linestyle="--", alpha=0.5)
plt.show()

效果图

Python使用Matplotlib绘制基础可视化图表的完整指南

5. 直方图 (Histogram)

直方图是观察数据分布形态的标配。测试数据模拟了1000名成年男性的身高数据(符合正态分布),用来展示整体分布区间。

import matplotlib.pyplot as plt
import numpy as np

# 设置中文显示
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# 生成测试数据:1000名男性的身高 (均值175cm,标准差7cm)
np.random.seed(42)
heights = np.random.normal(175, 7, 1000)

# 绘制直方图
plt.figure(figsize=(8, 5))
# bins=30 表示将数据分成30个区间,color设置颜色,edgecolor设置柱子边框色
plt.hist(heights, bins=30, color="mediumseagreen", edgecolor="black", alpha=0.7)

plt.title("成年男性身高分布情况", fontsize=14)
plt.xlabel("身高 (cm)")
plt.ylabel("人数")
plt.grid(axis="y", linestyle="--", alpha=0.5)
plt.show()

效果图

Python使用Matplotlib绘制基础可视化图表的完整指南

6. 箱线图 (Box Plot)

箱线图最适合拿来对比多组数据的分布情况——中位数、波动范围、异常值一览无余。测试数据模拟了A、B、C三个班级的数学成绩,用来对比各班水平和异常值情况。

import matplotlib.pyplot as plt
import numpy as np

# 设置中文显示
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# 生成测试数据:三个班级的数学成绩
np.random.seed(42)
class_A = np.random.normal(75, 10, 100) # A班:均值75,标准差10
class_B = np.random.normal(80, 8, 100)  # B班:均值80,标准差8
class_C = np.random.normal(70, 12, 100) # C班:均值70,标准差12(波动更大)

# 将数据组合成列表传入
data_to_plot = [class_A, class_B, class_C]
labels = ["A班", "B班", "C班"]

# 绘制箱线图
plt.figure(figsize=(8, 5))
plt.boxplot(data_to_plot, labels=labels, patch_artist=True, 
            boxprops=dict(facecolor="lightcoral", color="black"),
            medianprops=dict(color="white"))

plt.title("三个班级数学成绩分布对比", fontsize=14)
plt.ylabel("数学成绩")
plt.grid(axis="y", linestyle="--", alpha=0.5)
plt.show()

效果图

Python使用Matplotlib绘制基础可视化图表的完整指南

7. 热力图 (Heatmap)

热力图的应用场景非常有趣——它能帮你一眼扫出数据中的“热点”区域。不过绘制热力图,我们通常搭配一个更漂亮的库:seaborn。先装好依赖:

pip install matplotlib seaborn numpy pandas

测试数据模拟了一周七天内、某电商平台24小时的订单量矩阵。用它来找找哪个时间段是真正的下单高峰期。

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd

# 设置中文显示
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# 生成测试数据:7天 x 24小时的订单量矩阵
np.random.seed(42)
days = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
hours = [f"{h}点" for h in range(24)]
# 模拟数据:周末和晚间订单量较高
orders = np.random.randint(10, 100, size=(7, 24))
orders[5:, 18:23] += 50  # 周末晚间增加订单量

# 将数据转换为 DataFrame
df = pd.DataFrame(orders, index=days, columns=hours)

# 绘制热力图
plt.figure(figsize=(14, 6))
# annot=True 显示数值,fmt="d" 表示显示为整数,cmap 设置颜色主题
sns.heatmap(df, annot=False, fmt="d", cmap="YlOrRd", cbar_kws={'label': '订单量'})

plt.title("一周内每小时订单量热力图", fontsize=14)
plt.xlabel("时间")
plt.ylabel("星期")
plt.show()

效果图

Python使用Matplotlib绘制基础可视化图表的完整指南

8. 雷达图 (Radar Chart)

雷达图,也叫蜘蛛图,是多维度数据展示的神器。比如评估一个人的综合能力,或对比不同产品的性能指标,用雷达图一眼就能看清强项和短板。在Python里,借助matplotlib的极坐标系就能轻松实现。下面这个例子模拟了两名游戏角色的六维能力对比

import matplotlib.pyplot as plt
import numpy as np

# 设置中文显示 (Windows系统使用SimHei,Mac系统可换成PingFang SC)
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# 1. 准备测试数据
# 设定6个能力维度
categories = ["攻击", "防御", "速度", "耐力", "技术", "策略"]
num_vars = len(categories)

# 角色A的能力值(假设是均衡型战士)
stats_A = [85, 90, 70, 88, 75, 80]
# 角色B的能力值(假设是高攻高速刺客)
stats_B = [95, 60, 92, 65, 88, 70]

# 2. 计算每个维度的角度
# 将圆周(2*pi)平均分成 N 份
angles = np.linspace(0, 2 * np.pi, num_vars, endpoint=False).tolist()

# 3. 闭合图形
# 雷达图需要首尾相连,所以要把第一个维度的角度和数据追加到列表末尾
stats_A += stats_A[:1]
stats_B += stats_B[:1]
angles += angles[:1]

# 4. 创建极坐标画布并绘图
fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(polar=True))

# 绘制角色A的折线和填充区域
ax.plot(angles, stats_A, color="blue", linewidth=2, linestyle="solid", label="角色 A (均衡型)")
ax.fill(angles, stats_A, color="blue", alpha=0.2)

# 绘制角色B的折线和填充区域
ax.plot(angles, stats_B, color="red", linewidth=2, linestyle="solid", label="角色 B (刺客型)")
ax.fill(angles, stats_B, color="red", alpha=0.2)

# 5. 美化图表
# 设置半径(能力值)的范围,留出一点空间给图例
ax.set_ylim(0, 100)
# 设置维度标签(攻击、防御等)
ax.set_xticks(angles[:-1])
ax.set_xticklabels(categories, size=12)
# 添加图例
plt.legend(loc="upper right", bbox_to_anchor=(1.3, 1.1))
# 添加标题
plt.title("游戏角色六维能力对比雷达图", size=16, pad=20)

plt.show()

效果图

Python使用Matplotlib绘制基础可视化图表的完整指南

以上,就是使用Matplotlib绘制八种常见可视化图表的具体方法。从折线图到雷达图,每种图表都有它最适合的应用场景。数据可视化这件事,工具是固定的,但如何把数据讲成故事,才是真正的功夫所在。

本文内容来源于互联网,如有侵权请联系删除。
作者最新文章
编程开发 Python
相关文章 更多
C++动态数组初始化怎么写?常用语句与代码示例
C++动态数组初始化怎么写?常用语句与代码示例

深入解析C++中动态数组的初始化机制,涵盖new操作符的不同用法、基本类型与类对象的初始化差异,以及为何在现代C++开发中应优先使用std::vector。

Python安装后怎么打开:使用IDLE或命令行启动解释器
Python安装后怎么打开:使用IDLE或命令行启动解释器

刚在Windows安装好Python却不知道如何启动?本文详细演示如何通过开始菜单找到并打开IDLE集成开发环境,以及如何在PowerShell或命令提示符中使用python和py命令启动交互式解释器、运行.py脚本文件。包含退出解释器的方法及常见启动问题排查,帮助初学者快速验证安装成功并开始编写代码。

Windows系统Python安装教程:下载、勾选PATH及环境变量配置
Windows系统Python安装教程:下载、勾选PATH及环境变量配置

针对Windows初学者的Python安装实战指南。详细讲解如何从Python官网下载匹配架构的安装包,重点演示安装首屏勾选“Add python.exe to PATH”的关键操作,并提供使用python --version和py命令验证环境变量的具体步骤,帮助新手快速搭建开发环境并排查路径问题。

麒麟OS如何查看Python进程的运行状态
麒麟OS如何查看Python进程的运行状态

要想确认麒麟OS中Python程序的运行状态以及资源占用情况,我们可以这样做:用ps -ef | grep python来筛选进程;通过top命令,按P键排序查看实时负载;使用pgrep -f "script.py"精准获取PID;借助lsof -p PID验证文件打开状态。另外,还可以结合syst

Python在Debian上如何配置SSL证书
Python在Debian上如何配置SSL证书

在Debian系统上配置SSL证书通常涉及以下几个步骤:安装Web服务器:首先,你需要一个Web服务器,比如Apache或Nginx。这里以Apache为例。sudo apt updatesudo apt install apache2获取SSL证书:你可以从Let’s Encrypt免费获取SSL

统信UOS怎么安装Python开发环境
统信UOS怎么安装Python开发环境

要想让Python项目在统信UOS上正常运行,得先安装python3、python3-pip、python3-venv、python3-dev以及build-essential等组件。具体操作就是执行sudo apt install命令来一步到位完成安装,同时别忘了配置清华镜像源来给pip加速哦。在

纯Python方案实现中英文全文搜索
纯Python方案实现中英文全文搜索

在互联网上的各类网站中,无论大小,基本上都会有一个搜索框,用来给用户对内容进行搜索,小到站点搜索,大到搜索引擎搜索。从简单的来说,搜索功能确实很简单,一个简单的select语句就可以实现数据的搜索。而从复杂的来看,无论是搜索的精度还是搜索的效率,都是有很深的研究范围的。对于简单的搜索功能来说,一个s

Mac如何取消通过Python脚本运行的关机程序
Mac如何取消通过Python脚本运行的关机程序

立即在终端输入sudo shutdown -c取消倒计时关机,成功后显示“Shutdown cancelled”;若存在pmset重复任务,需再执行sudo pmset repeat cancel清除。Mac因Python脚本执行了os.system("sudo shutdown -h +10")或

Pythonasyncio异步并发与多固定出口IP调度实战
Pythonasyncio异步并发与多固定出口IP调度实战

之前写过一篇同步场景下用 Python 管理多个固定出口 IP 的实践(ExitPool + requests/httpx),覆盖了健康检查、故障转移和连接池复用。但在实际业务中,越来越多的场景用 asyncio 做高并发采集或批量接口调用——异步事件循环下多出口的管理方式和同步场景完全不同:单线程

Python在静态出口IP产品中的实战:从地址漂移巡检到多IP故障切换
Python在静态出口IP产品中的实战:从地址漂移巡检到多IP故障切换

写在前面:为什么静态出口 IP 不是"买了就行"不少团队在引入静态出口 IP 产品时,第一反应往往是:“地址配上去,这事就算完了。”可真到了真实业务里,静态出口 IP 真正能体现价值的地方,往往不在分配这一步,而在分配之后怎么管:地址有没有漂移,质量是否达标,某一条线路突然不可用时怎么切换,连接层又

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件
macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

Mac软件 更多
灵活计算器
灵活计算器
macOS/iOS/Android

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师
macOS

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式
Windows/macOS/Linux

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

WINDOWS 更多
Windows 10
Windows 10
Windows

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式
Windows/macOS/Linux

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘
Windows/macOS/iOS/Android

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。