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()
效果图:

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()
效果图:

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()
效果图

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()
效果图

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()
效果图

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()
效果图

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()
效果图

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()
效果图

以上,就是使用Matplotlib绘制八种常见可视化图表的具体方法。从折线图到雷达图,每种图表都有它最适合的应用场景。数据可视化这件事,工具是固定的,但如何把数据讲成故事,才是真正的功夫所在。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















