Python 数据分析 5:matplotlib/seaborn 可视化(画折线图 / 柱状图 / 热力图,调好看样式)
做数据分析时,“数据表格” 不如 “图表” 直观 —— 比如看 “每月销售额趋势”,表格里的数字需要逐个对比,而折线图一眼就能看出上升 / 下降;看 “各品类销量对比”,柱状图比数字罗列更易区分高低。matplotlib 是 Python 可视化的 “基础工具”,seaborn 在其基础上优化了样式,两者结合能画出既专业又好看的图表。
本文以电商 2024 年 Q1 销售数据为实战案例,手把手教你画 “折线图(趋势)、柱状图(对比)、热力图(关联)”,重点讲解 “样式优化技巧”(颜色、字体、布局),让你的图表从 “简陋” 变 “适合汇报”,新手也能轻松上手。
一、为什么需要数据可视化?(用业务场景说明)
假设我们有一份电商销售数据(延续上一篇分组统计的数据),包含 “月份、商品类别、地区、销售额、销量” 等字段。业务中常需要:
- 看 “每月销售额变化”:判断旺季 / 淡季(用折线图,适合展示趋势);
- 比 “各品类总销量”:找出热销 / 滞销品类(用柱状图,适合展示对比);
- 分析 “地区 - 品类销售额分布”:看哪个地区哪个品类卖得好(用热力图,适合展示关联)。
这些需求用表格很难直观呈现,而可视化能 “一图胜千言”,甚至发现表格中隐藏的规律(比如 3 月家电销售额突增)。
二、环境准备与数据加载
1. 安装并导入库
seaborn 依赖 matplotlib,先安装再导入(已安装的可跳过):
# 安装matplotlib(基础)和seaborn(美化) pip install matplotlib seaborn pandas numpy |
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns # 解决中文显示问题(新手必加,否则中文会变成方框) plt.rcParams["font.sans-serif"] = ["SimHei", "DejaVu Sans"] # 支持中文和英文 plt.rcParams["axes.unicode_minus"] = False # 解决负号显示问题 # 设置seaborn默认样式(自带美化,比matplotlib默认好看) sns.set_style("whitegrid") # 白色网格背景,清晰不杂乱 |
2. 加载实战数据(延续上一篇的电商数据)
为保持连贯性,我们用分组统计后的 “结构化数据”(也可替换为你的实际数据):
# 1. 构造/加载电商销售数据(含月份、品类、地区、销售额) # (如果有自己的数据,直接用pd.read_excel/pd.read_csv加载) data = { "月份": ["2024-01", "2024-01", "2024-01", "2024-01", "2024-02", "2024-02", "2024-02", "2024-02", "2024-03", "2024-03", "2024-03", "2024-03"], "商品类别": ["家电", "服装", "食品", "美妆"] * 3, "地区": ["华北", "华东", "华南", "西部"] * 3, "销售额(万元)": [35.6, 12.8, 8.5, 15.2, 42.3, 15.6, 9.8, 18.5, 51.2, 18.9, 11.2, 22.3], "销量(件)": [120, 320, 850, 95, 145, 380, 920, 110, 180, 450, 1050, 130] } df = pd.DataFrame(data) # 2. 预处理:生成后续需要的汇总数据(避免重复计算) # 2.1 月度销售额汇总(折线图用) monthly_sales = df.groupby("月份")["销售额(万元)"].sum().reset_index() # 2.2 品类销量汇总(柱状图用) category_sales = df.groupby("商品类别")["销量(件)"].sum().sort_values(ascending=False).reset_index() # 2.3 地区-品类销售额透视表(热力图用) region_category_sales = df.pivot_table( index="地区", columns="商品类别", values="销售额(万元)", aggfunc="sum" ) # 查看数据是否准备好 print(" |