
第八章 数据可视化
本文将从 基础绘图方法、常用图表类型、高级定制、与专业库对比 四个维度,系统、详细、实战化地介绍 Pandas 数据可视化的完整能力。
.plot() 是 Matplotlib 的封装,返回 matplotlib.axes.Axes 对象.plot()import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 在 Jupyter 中显示图形(非必须,但推荐)
%matplotlib inlines = pd.Series(np.random.randn(10).cumsum(), index=pd.date_range('2025-01-01', periods=10))
# 默认折线图
s.plot()
plt.title('Series 折线图')
plt.show()
df = pd.DataFrame(
np.random.randn(10, 4),
columns=['A', 'B', 'C', 'D'],
index=pd.date_range('2025-01-01', periods=10)
)
# 默认:每列一条线(折线图)
df.plot()
plt.title('DataFrame 多列折线图')
plt.show()
kind 参数指定)图表类型 |
| 适用场景 |
|---|---|---|
折线图 |
| 时间序列、趋势 |
柱状图 |
| 分类比较(垂直) |
水平柱状图 |
| 类别名较长时 |
直方图 |
| 数值分布 |
箱线图 |
| 分布与异常值 |
密度图 |
| 平滑分布估计 |
面积图 |
| 累计贡献 |
散点图 |
| 两变量关系 |
六边形图 |
| 大量散点密度 |
✅ 所有图表都可通过
df.plot(kind='xxx')或df.plot.xxx()调用
df.plot(
kind='line',
title='销售额趋势',
xlabel='日期',
ylabel='金额(万元)',
figsize=(10, 6),
grid=True,
style=['-', '--', '-.', ':'] # 线型
)
plt.show()
# 分类数据示例
sales = pd.DataFrame({
'产品': ['手机', '电脑', '平板', '耳机'],
'Q1': [120, 80, 50, 30],
'Q2': [130, 85, 55, 35]
}).set_index('产品')
# 垂直柱状图(默认)
sales.plot(kind='bar', figsize=(8, 5), title='各产品季度销量')
plt.xticks(rotation=0) # 横轴标签不旋转
plt.show()
# 水平柱状图
sales.plot(kind='barh', stacked=True) # 堆叠
plt.show()

df['A'].plot(kind='hist', bins=20, alpha=0.7, title='A 列数据分布')
plt.show()
# 多列直方图(重叠)
df[['A', 'B']].plot.hist(alpha=0.5, bins=20)
plt.show()

df.plot(kind='box', title='各列数据分布箱线图')
plt.ylabel('数值')
plt.show()
# 需指定 x 和 y 列
df.plot(
kind='scatter',
x='A',
y='B',
c='C', # 颜色映射第三列
colormap='viridis',
title='A vs B (颜色=C)'
)
plt.show()
df = df.abs()
df.plot(kind='area', stacked=True, alpha=0.7, title='累计贡献')
plt.show()
df['A'].plot(kind='kde', title='A 列核密度估计')
plt.show()
参数 | 说明 | 示例 |
|---|---|---|
| 图形大小(宽, 高) |
|
| 图表标题 |
|
| 坐标轴标签 |
|
| 显示网格 |
|
| 显示图例 |
|
| 颜色 |
|
| 透明度(0~1) |
|
| x 轴标签旋转角度 |
|
# 每列一个子图
df.plot(subplots=True, layout=(2, 2), figsize=(10, 8))
plt.tight_layout()
plt.show()
ax = df['A'].plot(figsize=(10, 6), color='blue', label='A')
ax2 = ax.twinx() # 共享 x 轴
df['B'].plot(ax=ax2, color='red', label='B')
ax.set_ylabel('A 值', color='blue')
ax2.set_ylabel('B 值', color='red')
plt.title('双 Y 轴图')
plt.show()
⚠️ 注意:Pandas 原生不支持
secondary_y 在.plot() 中直接使用(旧版本支持),建议用上述 Matplotlib 方式。
# 将宽表转为长表(便于分组)
sales_long = sales.reset_index().melt(id_vars='产品', var_name='季度', value_name='销量')
print(sales_long)
# 使用 Seaborn 更方便(见下文对比)
plt.figure(figsize=(10, 6))
sns.barplot(x='产品', y='销量', hue='季度', data=sales_long)
plt.title('各产品季度销量')
plt.show()
功能 | Pandas | Seaborn | Plotly |
|---|---|---|---|
易用性 | ⭐⭐⭐⭐⭐(极简) | ⭐⭐⭐⭐ | ⭐⭐⭐ |
统计图表 | 基础 | ⭐⭐⭐⭐⭐(箱线、小提琴等) | ⭐⭐⭐ |
美观度 | 一般(可定制) | ⭐⭐⭐⭐⭐(默认美观) | ⭐⭐⭐⭐⭐(交互式) |
交互性 | ❌ | ❌ | ⭐⭐⭐⭐⭐ |
大数据性能 | 一般 | 一般 | 较好(WebGL) |
适用场景 | 快速 EDA | 发表级静态图 | 仪表盘、Web 应用 |
import seaborn as sns
# 散点图 + 回归线
sns.scatterplot(data=df, x='A', y='B', hue='C')
sns.regplot(data=df, x='A', y='B', scatter=False)
plt.show()
# 箱线图(按类别)
sns.boxplot(data=sales_long, x='产品', y='销量', hue='季度')
plt.show()plt.rcParams['font.sans-serif'] = ['SimHei'] # Windows
plt.rcParams['axes.unicode_minus'] = False # 正常显示负号plt.show() # 必须调用df.plot()
plt.gca().xaxis.set_major_formatter(plt.matplotlib.dates.DateFormatter('%Y-%m'))
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()df.plot(color=['#FF5733', '#33FF57', '#3357FF'])场景 | 推荐做法 |
|---|---|
快速查看趋势 |
|
比较分类数据 |
|
检查数据分布 |
|
发现变量关系 |
|
检测异常值 |
|
需要美观/发表 | 转用 Seaborn |
需要交互 | 转用 Plotly |
💡 记住: Pandas 可视化 = 快速探索的“瑞士军刀”, 不是最终交付工具,但能极大提升分析效率!
python过渡项目部分代码已经上传至gitee,后续会逐步更新。
公众号:咚咚王
《Python编程:从入门到实践》
《利用Python进行数据分析》
《算法导论中文第三版》
《概率论与数理统计(第四版) (盛骤) 》
《程序员的数学》
《线性代数应该这样学第3版》
《微积分和数学分析引论》
《(西瓜书)周志华-机器学习》
《TensorFlow机器学习实战指南》
《Sklearn与TensorFlow机器学习实用指南》
《模式识别(第四版)》
《深度学习 deep learning》伊恩·古德费洛著 花书
《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》
《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》
《自然语言处理综论 第2版》
《Natural-Language-Processing-with-PyTorch》
《计算机视觉-算法与应用(中文版)》
《Learning OpenCV 4》
《AIGC:智能创作时代》杜雨+&+张孜铭
《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》
《从零构建大语言模型(中文版)》
《实战AI大模型》
《AI 3.0》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。