尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Python数据可视化全攻略:Matplotlib/Seaborn从入门到实战

Python数据可视化全攻略:Matplotlib/Seaborn从入门到实战
📅 发布时间:2026/6/19 17:08:31
本文聚焦Python两大主流可视化库——Matplotlib(基础绘图库)和Seaborn(高级统计绘图库),从实战场景出发,讲解折线图、柱状图、散点图、热力图等高频图表的绘制方法,适合数据分析新手快速上手。

数据可视化是数据分析的核心环节,通过图表将枯燥的数字转化为直观的图形,能快速发现数据规律、提升分析结果的可读性。

一、环境准备:安装与基础配置

1. 库安装

首先确保安装Matplotlib、Seaborn及依赖库(Pandas/Numpy用于数据处理):

pip install matplotlib seaborn pandas numpy

2. 基础配置(解决中文显示、图表样式问题)

Matplotlib默认不支持中文,需提前配置字体;Seaborn可通过预设样式美化图表:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np# 全局配置:解决Matplotlib中文显示问题(Windows/Linux/Mac通用)
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]  # 中文支持字体
plt.rcParams["axes.unicode_minus"] = False  # 解决负号显示为方块的问题# Seaborn样式配置(可选,让图表更美观)
sns.set_style("whitegrid")  # 预设样式:whitegrid/darkgrid/white/ticks
sns.set_palette("Set2")     # 配色方案:Set2/tab10/Paired等

二、Matplotlib核心操作:基础图表绘制

Matplotlib是Python可视化的基础,支持自定义图表的每一个元素,适合绘制各类基础图表。

1. 折线图:展示数据趋势(如时间序列)

适用场景:分析数据随时间/连续变量的变化趋势,如月度销售额、日访问量。

# 构造示例数据:月度销售额
months = ["1月", "2月", "3月", "4月", "5月", "6月"]
sales = [120, 150, 130, 180, 200, 220]# 创建画布与子图(figsize指定图表大小)
fig, ax = plt.subplots(figsize=(10, 6))# 绘制折线图
ax.plot(months, sales, color="#2E86AB",  # 线条颜色linewidth=2,      # 线条宽度marker="o",       # 数据点标记样式markersize=8,     # 标记大小label="销售额(万元)"
)# 添加标题、坐标轴标签
ax.set_title("2024年上半年销售额趋势", fontsize=16, pad=20)
ax.set_xlabel("月份", fontsize=12)
ax.set_ylabel("销售额(万元)", fontsize=12)# 添加图例、网格
ax.legend(loc="upper left", fontsize=10)
ax.grid(True, alpha=0.3)  # alpha调整网格透明度# 保存图片(dpi控制清晰度,bbox_inches解决标题被截断)
plt.savefig("sales_trend.png", dpi=300, bbox_inches="tight")
plt.show()

2. 柱状图:对比分类数据(如不同品类销量)

适用场景:对比不同分类的数值大小,如各产品销量、各部门人数。

# 构造示例数据:各产品销量
products = ["产品A", "产品B", "产品C", "产品D"]
sales_2023 = [80, 150, 100, 120]
sales_2024 = [100, 180, 110, 150]# 绘制分组柱状图
x = np.arange(len(products))  # 分类位置
width = 0.35  # 柱子宽度fig, ax = plt.subplots(figsize=(10, 6))
# 2023年销量
ax.bar(x - width/2, sales_2023, width, label="2023年", color="#A23B72")
# 2024年销量
ax.bar(x + width/2, sales_2024, width, label="2024年", color="#F18F01")# 自定义坐标轴与标签
ax.set_title("2023-2024年各产品销量对比", fontsize=16)
ax.set_xlabel("产品类型", fontsize=12)
ax.set_ylabel("销量(件)", fontsize=12)
ax.set_xticks(x)
ax.set_xticklabels(products)
ax.legend()# 给柱子添加数值标签
for i, v in enumerate(sales_2023):ax.text(i - width/2, v + 5, str(v), ha="center", fontsize=10)
for i, v in enumerate(sales_2024):ax.text(i + width/2, v + 5, str(v), ha="center", fontsize=10)plt.show()

3. 散点图:分析变量相关性(如身高与体重)

适用场景:展示两个数值变量的关系,判断是否存在正/负相关。

# 构造示例数据:身高与体重
np.random.seed(0)  # 固定随机数,保证结果可复现
height = np.random.normal(170, 5, 200)  # 身高:均值170,标准差5
weight = height * 0.6 + np.random.normal(0, 3, 200)  # 体重与身高正相关fig, ax = plt.subplots(figsize=(10, 6))
# 绘制散点图
ax.scatter(height, weight,c="#F18F01",  # 点的颜色alpha=0.7,    # 透明度(避免点重叠)s=50,         # 点的大小edgecolors="black"  # 点的边框颜色
)ax.set_title("身高与体重相关性分析", fontsize=16)
ax.set_xlabel("身高(cm)", fontsize=12)
ax.set_ylabel("体重(kg)", fontsize=12)
ax.grid(True, alpha=0.3)plt.show()

三、Seaborn进阶操作:统计可视化更高效

Seaborn基于Matplotlib开发,专为统计分析设计,代码更简洁、图表更美观,支持一键绘制带统计信息的图表。

1. 箱线图:分析数据分布(如不同地区薪资)

适用场景:展示数据的四分位数、异常值,对比不同分组的分布差异。

# 构造示例数据:不同城市薪资
data = {"城市": ["北京"]*50 + ["上海"]*50 + ["广州"]*50 + ["深圳"]*50,"薪资": np.concatenate([np.random.normal(15000, 3000, 50),  # 北京np.random.normal(14000, 2800, 50),  # 上海np.random.normal(10000, 2000, 50),  # 广州np.random.normal(14500, 3200, 50)   # 深圳])
}
df = pd.DataFrame(data)# 绘制箱线图
plt.figure(figsize=(12, 7))
sns.boxplot(x="城市", y="薪资", data=df,palette="Set2",  # 配色linewidth=1.5    # 线条宽度
)plt.title("一线城市薪资分布对比", fontsize=16, pad=20)
plt.xlabel("城市", fontsize=12)
plt.ylabel("薪资(元)", fontsize=12)
plt.grid(axis="y", alpha=0.3)
plt.show()

2. 热力图:展示数据相关性(如特征关联度)

适用场景:以颜色深浅展示矩阵数据,分析变量间的相关性,如电商用户行为特征关联。

# 构造示例数据:特征相关性矩阵
# 数据为随机生成的5个特征的相关性
np.random.seed(1)
corr_data = np.random.rand(5, 5)
corr_data = (corr_data + corr_data.T) / 2  # 转为对称矩阵(模拟相关性)
np.fill_diagonal(corr_data, 1)  # 对角线为1(自身相关)# 特征名称
features = ["消费金额", "购买频次", "浏览时长", "收藏数", "评价数"]
corr_df = pd.DataFrame(corr_data, index=features, columns=features)# 绘制热力图
plt.figure(figsize=(10, 8))
sns.heatmap(corr_df,annot=True,        # 显示数值fmt=".2f",         # 数值格式(保留2位小数)cmap="RdBu_r",     # 配色方案(红-蓝反向)vmin=-1, vmax=1,   # 颜色范围(相关性-1到1)linewidths=0.5,    # 格子边框宽度cbar_kws={"label": "相关系数"}  # 颜色条标签
)plt.title("用户行为特征相关性热力图", fontsize=16, pad=20)
plt.xticks(rotation=45, ha="right")  # x轴标签旋转,避免重叠
plt.show()

3. 直方图+核密度图:展示数据分布(如年龄分布)

适用场景:结合直方图(频数)和核密度图(概率密度),直观展示单变量分布。

# 构造示例数据:用户年龄
age = np.random.normal(30, 8, 1000)  # 均值30,标准差8
age = np.clip(age, 18, 60)  # 限制年龄范围18-60岁
df_age = pd.DataFrame({"年龄": age})# 绘制直方图+核密度图
plt.figure(figsize=(12, 7))
sns.histplot(data=df_age,x="年龄",bins=20,          # 直方图分组数kde=True,         # 显示核密度曲线color="#2E86AB",edgecolor="black"
)plt.title("平台用户年龄分布", fontsize=16, pad=20)
plt.xlabel("年龄", fontsize=12)
plt.ylabel("人数", fontsize=12)
plt.grid(axis="y", alpha=0.3)
plt.show()

四、实战案例:整合Matplotlib+Seaborn分析销售数据

结合以上知识点,完成一个完整的销售数据可视化分析案例:

# 1. 构造销售数据
np.random.seed(2)
dates = pd.date_range(start="2024-01-01", end="2024-06-30", freq="D")
sales_data = {"日期": dates,"销售额": np.random.normal(10000, 2000, len(dates)),"品类": np.random.choice(["电子产品", "服装", "食品", "家居"], len(dates))
}
df_sales = pd.DataFrame(sales_data)
# 按月份+品类汇总
df_sales["月份"] = df_sales["日期"].dt.month_name()
month_order = ["January", "February", "March", "April", "May", "June"]
df_monthly = df_sales.groupby(["月份", "品类"])["销售额"].sum().reset_index()# 2. 绘制子图:左(月度总销售额折线图)、右(品类销售额柱状图)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(18, 7))# 子图1:月度总销售额折线图(Matplotlib)
monthly_total = df_sales.groupby("月份")["销售额"].sum().reindex(month_order)
ax1.plot(["1月", "2月", "3月", "4月", "5月", "6月"],monthly_total.values,color="#A23B72",linewidth=3,marker="o",markersize=10
)
ax1.set_title("2024年上半年月度总销售额", fontsize=14)
ax1.set_xlabel("月份")
ax1.set_ylabel("销售额(元)")
ax1.grid(alpha=0.3)# 子图2:各品类月度销售额柱状图(Seaborn)
sns.barplot(x="月份",y="销售额",hue="品类",data=df_monthly,order=month_order,palette="Set2",ax=ax2
)
ax2.set_title("2024年上半年各品类月度销售额", fontsize=14)
ax2.set_xlabel("月份")
ax2.set_ylabel("销售额(元)")
ax2.set_xticklabels(["1月", "2月", "3月", "4月", "5月", "6月"])
ax2.legend(title="品类", loc="upper right")# 全局标题
fig.suptitle("2024年上半年销售数据可视化分析", fontsize=18, y=1.02)
plt.tight_layout()  # 调整子图间距
plt.savefig("sales_analysis.png", dpi=300, bbox_inches="tight")
plt.show()

五、常见问题与优化技巧

1. 图表优化小技巧

  • 中文显示:通过plt.rcParams配置字体,避免乱码;
  • 图表清晰度:保存时设置dpi=300,提升图片分辨率;
  • 标签重叠:使用plt.xticks(rotation=45)旋转x轴标签,或figsize调大画布;
  • 配色选择:优先使用Seaborn预设配色(如Set2、tab10),避免颜色杂乱。

2. 常见报错解决

  • UserWarning: findfont: Font family [...] not found:更换系统已安装的中文字体名称;
  • ValueError: x and y must be the same size:检查x、y轴数据长度是否一致;
  • 图表不显示:确保最后执行plt.show()(Jupyter环境需%matplotlib inline)。

相关新闻

  • 日总结 37
  • 环境配置
  • RustFS是国产的吗?有人用吗?深度解析这款新兴对象存储

最新新闻

  • 2026苏州黄金回收门店梯队测评,个人闲置黄金变现优选与避雷完整指南 - 奢侈品交易观察员
  • 2026重庆名表回收榜单|靠谱门店凭什么只剩收的顶稳居榜首? - 奢侈品回收测评
  • C标准数学库深度解析:从hypot与log函数看数值计算工程实践
  • 2026年6月昆明黄金回收行情 哪里回收黄金不被扣损耗 - 润富黄金回收
  • 2026芜湖奢侈品名包名表回收避坑攻略:持证专业鉴定门店,查验估价全程公开透明 - 鸿运名品
  • 2026年6月优秀的石墨吸收塔厂家推荐伊科思德石墨科技,CFD流场模拟优化塔内结构提升整体处理产能 - 品牌鉴赏师

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号