python学习之快速掌握 pandas 数据可视化:「matplotlib+seaborn」极简实战方案

一.python可视化库

不用学太多库,优先掌握「matplotlib+seaborn」,两者配合能搞定 90% 的日常可视化需求

可视化库 定位 Java 类比
matplotlib Python 可视化「基础引擎」,能画所有基础图表,但默认样式丑 Java 的 Swing(原生画图工具,功能全但样式原始)
seaborn 基于 matplotlib 封装,语法更简单、样式更美观,适配 pandas Java 的 EasyUI/ElementUI(封装原生组件,美化 + 简化操作)
pandas.plot pandas 直接调用 matplotlib 的快捷接口,一行代码从 DataFrame 出图 Java 中 List 直接调用工具类画图,不用手动初始化画布

简单说:先用 pandas.plot 画基础图(最快),再用 seaborn 美化,matplotlib 做细节调整(比如改标题、坐标轴),不用单独学复杂的 matplotlib 语法。

二、前置准备:内网离线安装可视化库

1. 需安装的库(适配 Python3.8)

库名 版本(适配 Python3.8) 作用
matplotlib 3.7.5 核心可视化引擎
seaborn 0.12.2 美化图表,简化语法
pillow 9.5.0 辅助图片保存(内网 Win7 必装)

2. 离线安装步骤

外网 Win7 32 位 Python3.8 执行下载命令(适配内网 64 位):

bash 复制代码
pip download matplotlib==3.7.5 seaborn==0.12.2 pillow==9.5.0 --platform win_amd64 --python-version 38 --only-binary=:all: -d D:\python_packages -i https://mirrors.aliyun.com/pypi/simple/

拷贝所有.whl包到内网,执行安装:

bash 复制代码
pip install *.whl

验证安装:

python 复制代码
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
# 无报错即成功

三、搞定4 类高频图表(覆盖 80% 场景)

前置:通用初始化(解决内网 Win7 中文乱码)

Win7 下 matplotlib 默认不支持中文,先加这几行代码(复制到所有可视化脚本开头):

python 复制代码
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 解决中文乱码(内网Win7必加)
plt.rcParams["font.family"] = ["SimHei"]  # 黑体,适配Win7
plt.rcParams["axes.unicode_minus"] = False  # 解决负号显示问题

# 读取并清洗数据(复用之前的代码)
df = pd.read_csv("sales_data.csv")
df["销售额"] = df["销售额"].fillna(0)  # 填充空值
df["日期"] = pd.to_datetime(df["日期"])  # 转换日期类型
df["月份"] = df["日期"].dt.month  # 提取月份

1. 柱状图(最常用:对比不同类别数据,比如各部门销售额)

需求:展示销售一部 / 二部的总销售额对比

python 复制代码
# 步骤1:用pandas分组统计(复用之前的分析代码)
dept_sales = df.groupby("部门")["销售额"].sum()

# 步骤2:一行代码画柱状图(pandas.plot快捷方式)
dept_sales.plot(kind="bar", title="各部门总销售额对比", xlabel="部门", ylabel="销售额(元)")

# 步骤3:显示/保存图片(内网无界面也能保存)
plt.tight_layout()  # 自动调整布局,避免标题/标签被截断
plt.savefig("部门销售额柱状图.png")  # 保存到本地(内网可查看)
# plt.show()  # 有桌面界面的话,显示图片(内网Win7可能需要装tkinter,优先用savefig)

关键调整:改kind="barh"就是横向柱状图,适合类别多的场景。

2. 折线图(展示趋势:比如每日销售额变化)

需求:展示 1 月份每天的销售额趋势

python 复制代码
# 步骤1:按日期分组统计
day_sales = df.groupby("日期")["销售额"].sum()

# 步骤2:画折线图(seaborn美化版)
sns.lineplot(x=day_sales.index, y=day_sales.values, marker="o", color="red")
plt.title("1月份每日销售额趋势")
plt.xlabel("日期")
plt.ylabel("销售额(元)")
plt.xticks(rotation=45)  # 日期标签旋转45度,避免重叠
plt.tight_layout()
plt.savefig("每日销售额折线图.png")

关键调整:marker="s"是方形标记,color="blue"改颜色,按需调整。

3. 饼图(展示占比:比如各部门销售额占总销售额的比例)

需求:展示各部门销售额的占比

python 复制代码
# 步骤1:分组统计
dept_sales = df.groupby("部门")["销售额"].sum()

# 步骤2:画饼图
plt.pie(dept_sales.values, labels=dept_sales.index, autopct="%1.1f%%", startangle=90)
plt.title("各部门销售额占比")
plt.axis("equal")  # 保证饼图是正圆形
plt.tight_layout()
plt.savefig("部门销售额饼图.png")

关键调整:autopct="%1.2f%%"是保留 2 位小数,startangle=0改起始角度。

4.散点图(展示关联:比如销售员销售额分布)

python 复制代码
# 步骤1:准备数据(销售员+销售额)
salesman_data = df[["销售员", "销售额"]].dropna()

# 步骤2:画散点图
sns.scatterplot(x="销售员", y="销售额", data=salesman_data, s=100, color="green")
plt.title("销售员销售额分布")
plt.xlabel("销售员")
plt.ylabel("销售额(元)")
plt.tight_layout()
plt.savefig("销售员销售额散点图.png")

关键调整:s=200放大点的尺寸

四、完整实战案例(从数据分析到可视化)

基于「销售数据」做全流程可视化,覆盖「清洗→分析→多图表输出」,代码如下:

python 复制代码
# 1. 导入库+初始化
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams["font.family"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# 2. 读取并清洗数据
df = pd.read_csv("sales_data.csv")
df["销售额"] = df["销售额"].fillna(0)
df["日期"] = pd.to_datetime(df["日期"])
df["月份"] = df["日期"].dt.month

# 3. 多维度分析
# 3.1 部门总销售额
dept_sales = df.groupby("部门")["销售额"].sum()
# 3.2 每日销售额
day_sales = df.groupby("日期")["销售额"].sum()
# 3.3 销售员销售额
salesman_sales = df.groupby("销售员")["销售额"].sum()

# 4. 批量生成可视化图表(子图:一张图里放多个图表)
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(12, 8))  # 2行2列子图

# 4.1 柱状图(部门销售额)
dept_sales.plot(kind="bar", ax=ax1, title="各部门总销售额")
ax1.set_xlabel("部门")
ax1.set_ylabel("销售额(元)")

# 4.2 折线图(每日销售额)
sns.lineplot(x=day_sales.index, y=day_sales.values, ax=ax2, marker="o")
ax2.set_title("每日销售额趋势")
ax2.set_xlabel("日期")
ax2.tick_params(axis='x', rotation=45)

# 4.3 饼图(部门占比)
ax3.pie(dept_sales.values, labels=dept_sales.index, autopct="%1.1f%%")
ax3.set_title("部门销售额占比")

# 4.4 散点图(销售员销售额)
sns.scatterplot(x=salesman_sales.index, y=salesman_sales.values, ax=ax4, s=100)
ax4.set_title("销售员销售额分布")

# 5. 保存总图表
plt.tight_layout()
plt.savefig("销售数据可视化总览.png")
print("所有图表已保存到本地!")

五、内网 Win7 可视化避坑点

常见问题 原因 + 解决方法
中文乱码 matplotlib 默认无中文字体 → 加plt.rcParams["font.family"] = ["SimHei"]
plt.show()无反应 / 报错 Win7 缺少 tkinter 组件 → 优先用plt.savefig()保存图片,不用显示;若要显示,外网下载tkinter-8.6.12-cp38-cp38-win_amd64.whl内网安装
图片保存后截断标题 / 标签 没加plt.tight_layout() → 保存前必加这行

六、快速掌握的核心技巧

  • 「复用分析结果」 :可视化不用重新写数据分析代码,直接用 pandas 分组后的结果(如dept_sales),减少重复工作;
  • 「先画再改」:先跑通基础代码画出图,再调整标题、颜色、尺寸,不用一开始就纠结样式;
  • 「聚焦高频图表」:先搞定柱状图 / 折线图 / 饼图 / 散点图,复杂图表(热力图、箱线图)等有需求再学;
  • 「本地验证」 :内网不用联网,画完用savefig()保存图片,打开查看效果,比在线调试更高效;
  • 「极简记忆」 :每个图表记 1 行核心代码,比如柱状图 =df.plot(kind="bar"),折线图 =sns.lineplot(x,y),忘了就查速查表

七、可视化速查表(内网可记,忘了就查)

图表类型 核心代码(基于 pandas 分析结果) 适用场景
柱状图 df.groupby("列1")["列2"].sum().plot(kind="bar") 类别对比(部门 / 销售员销售额)
折线图 sns.lineplot(x=索引, y=值, marker="o") 趋势分析(每日 / 每月销售额)
饼图 plt.pie(值, labels=索引, autopct="%1.1f%%") 占比分析(部门销售额占比)
散点图 sns.scatterplot(x="列1", y="列2", data=df) 关联分析(销售员 - 销售额)

总结(3 个核心要点)

  • 工具选择:优先用pandas.plot(快)+seaborn(美)+matplotlib(调细节),不用学多余库;
  • 学习路径:先练 4 类高频图表,基于已有分析数据画,再做完整实战案例;
  • 内网适配:解决中文乱码、优先保存图片、批量安装依赖,避免卡壳。
相关推荐
桂花饼2 小时前
Sora-2 API 低成本接入指南:Python 实现 0.08 元/次的视频生成方案
人工智能·python·qwen3-next·nano banana pro·gemini-3-pro·sora2pro
MediaTea2 小时前
Python:迭代器的应用场景
开发语言·python·算法
Hui Baby2 小时前
Spring Boot 中使用 JSONPath 高效处理 JSON 数据
spring boot·python·json
springlustre3 小时前
20GB核心知识库无损大迁徙:纯内网环境下从 Confluence 9到 Wiki.js 的踩坑与实践
python·wikijs·wikijs迁移
henry1010103 小时前
利用Python一键清理AWS EC2实例
python·云计算·aws
小鸡吃米…3 小时前
TensorFlow - 词嵌入
人工智能·python·tensorflow·neo4j
.小小陈.3 小时前
Python基础语法详解4:函数、列表与元组全解析
开发语言·c++·python·学习
Lun3866buzha3 小时前
【石油泄漏检测】YOLO13-C3k2-RFCBAMConv模型详解与应用
python