一.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 类高频图表,基于已有分析数据画,再做完整实战案例;
- 内网适配:解决中文乱码、优先保存图片、批量安装依赖,避免卡壳。