HoRain云--Pandas数据可视化10大核心图表技巧

🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
|
专栏名称 |
专栏介绍 |
|
本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 |
|
|
本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! |
|
|
全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 |
|
|
本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 |
|
|
本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 |
|
|
本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录

📊 Pandas 数据可视化完整指南
根据最新资料,我为您整理了一份全面的 Pandas 数据可视化教程。Pandas 内置的 .plot() 方法是基于 Matplotlib 的封装,使用简洁高效,适合快速探索和分析数据。
🎯 一、可视化基础设置
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 设置中文显示(避免乱码)
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
# 设置图表样式
plt.style.use('seaborn-v0_8') # 或 'ggplot', 'bmh', 'dark_background'
# 创建示例数据
df = pd.DataFrame({
'日期': pd.date_range('2025-01-01', periods=12, freq='M'),
'销售额': np.random.randint(100, 500, 12),
'成本': np.random.randint(50, 300, 12),
'利润': np.random.randint(30, 200, 12),
'类别': ['A', 'B', 'C'] * 4
})
📈 二、10种核心图表类型
1️⃣ 折线图 (Line Chart) - 趋势分析
# 基础折线图
df.plot(x='日期', y='销售额', kind='line', figsize=(10, 6),
title='销售趋势', marker='o', linewidth=2)
# 多系列折线图
df.plot(x='日期', y=['销售额', '成本', '利润'], kind='line',
figsize=(12, 6), title='财务指标趋势')
# 简写方式
df.plot.line(figsize=(10, 6))
2️⃣ 柱状图 (Bar Chart) - 类别比较
# 垂直柱状图
df.plot(x='类别', y='销售额', kind='bar', figsize=(8, 6),
title='各类别销售额', color='steelblue')
# 水平柱状图
df.plot(x='类别', y='销售额', kind='barh', figsize=(8, 6),
title='各类别销售额(横向)')
# 堆叠柱状图
df_grouped = df.groupby('类别').sum()
df_grouped.plot(kind='bar', stacked=True, figsize=(10, 6),
title='堆叠柱状图', colormap='viridis')
# 分组柱状图
df_grouped.plot(kind='bar', figsize=(10, 6), width=0.8,
title='分组柱状图')
3️⃣ 直方图 (Histogram) - 分布分析
# 单变量直方图
df['销售额'].plot(kind='hist', bins=20, figsize=(10, 6),
title='销售额分布', edgecolor='black', alpha=0.7)
# 多变量直方图
df.plot(kind='hist', bins=15,
figsize=(12, 6), alpha=0.6,
title='多变量分布对比')
# 密度图
df['销售额'].plot(kind='kde', figsize=(10, 6),
title='销售额密度分布', linewidth=2)
4️⃣ 散点图 (Scatter Plot) - 关系分析
# 基础散点图
df.plot(x='成本', y='销售额', kind='scatter', figsize=(10, 6),
title='成本与销售额关系', s=100, alpha=0.6, c='coral')
# 带颜色分类的散点图
df.plot(x='成本', y='销售额', kind='scatter', figsize=(10, 6),
c='利润', cmap='viridis', s=100, alpha=0.7,
title='利润热力散点图', colorbar=True)
# 简写方式
df.plot.scatter(x='成本', y='销售额', figsize=(10, 6))
5️⃣ 箱线图 (Box Plot) - 异常值检测
# 单变量箱线图
df.plot(kind='box', figsize=(10, 6),
title='财务指标箱线图',
patch_artist=True)
# 按类别分组箱线图
df.boxplot(column='销售额', by='类别', figsize=(10, 6),
title='各类别销售额分布')
# 横向箱线图
df.plot(kind='boxh', figsize=(10, 6),
title='横向箱线图')
6️⃣ 饼图 (Pie Chart) - 占比分析
# 基础饼图
df.groupby('类别')['销售额'].sum().plot(kind='pie',
figsize=(8, 8),
autopct='%1.1f%%',
startangle=90,
title='销售额占比')
# 环形图
df.groupby('类别')['销售额'].sum().plot(kind='pie',
figsize=(8, 8),
autopct='%1.1f%%',
wedgeprops={'width': 0.3},
title='销售额环形图')
7️⃣ 面积图 (Area Chart) - 累积趋势
# 堆叠面积图
df_grouped = df.groupby('类别').sum()
df_grouped.plot(kind='area', figsize=(10, 6),
title='堆叠面积图', alpha=0.7,
colormap='plasma')
# 非堆叠面积图
df.plot(kind='area', figsize=(10, 6),
stacked=False, alpha=0.5,
title='非堆叠面积图')
8️⃣ 热力图 (Heatmap) - 相关性分析
# 相关系数热力图
import seaborn as sns
corr_matrix = df.corr()
plt.figure(figsize=(8, 6))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm',
center=0, fmt='.2f', linewidths=0.5)
plt.title('变量相关性热力图')
plt.show()
# DataFrame 热力图显示
df_numeric = df.select_dtypes(include=[np.number])
plt.figure(figsize=(10, 8))
sns.heatmap(df_numeric.corr(), annot=True, cmap='RdYlBu_r',
vmin=-1, vmax=1, center=0)
9️⃣ 六边形分箱图 (Hexbin) - 密集数据
# 适用于数据点过于密集的情况
df.plot(kind='hexbin', x='成本', y='销售额',
gridsize=20, figsize=(10, 8),
title='六边形分箱图', cmap='viridis',
sharex=False, sharey=False)
🔟 子图布局 (Subplots) - 多图表对比
# 创建多个子图
df.plot(x='日期', y=['销售额', '成本', '利润'],
kind='line', subplots=True,
layout=(1, 3), figsize=(15, 5),
title=['销售额趋势', '成本趋势', '利润趋势'],
sharex=True)
# 自定义子图
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
df['销售额'].plot(kind='hist', ax=axes[0, 0], title='销售额直方图')
df['成本'].plot(kind='kde', ax=axes[0, 1], title='成本密度图')
df.plot(x='成本', y='销售额', kind='scatter', ax=axes[1, 0],
title='散点图')
df.plot(kind='box', ax=axes[1, 1],
title='箱线图')
plt.tight_layout()
🎨 三、图表样式定制
# 完整样式定制示例
ax = df.plot(x='日期', y='销售额', kind='line',
figsize=(12, 7),
linewidth=3,
marker='o',
markersize=8,
markerfacecolor='white',
markeredgecolor='red',
color='steelblue',
title='销售趋势分析',
fontsize=14,
rot=45, # x轴标签旋转
grid=True,
legend=True)
# 添加额外装饰
ax.set_xlabel('日期', fontsize=12)
ax.set_ylabel('销售额(万元)', fontsize=12)
ax.axhline(y=df['销售额'].mean(), color='r', linestyle='--',
label=f'平均值: {df["销售额"].mean():.1f}')
ax.legend(loc='best', fontsize=10)
plt.tight_layout()
常用参数说明
| 参数 | 说明 | 示例值 |
|---|---|---|
kind |
图表类型 | 'line', 'bar', 'hist', 'scatter', 'box', 'pie', 'area', 'hexbin' |
figsize |
图表大小 | (10, 6) |
title |
标题 | '销售趋势' |
color |
颜色 | 'blue', '#FF5733', ['red', 'green'] |
alpha |
透明度 | 0.5 |
linewidth |
线宽 | 2 |
marker |
标记样式 | 'o', 's', '^', 'x' |
markersize |
标记大小 | 8 |
grid |
网格线 | True |
legend |
图例 | True |
subplots |
子图 | True |
layout |
子图布局 | (2, 3) |
sharex/sharey |
共享坐标轴 | True |
colormap |
颜色映射 | 'viridis', 'plasma', 'coolwarm' |
bins |
直方图分箱数 | 20 |
stacked |
堆叠 | True |
📅 四、时间序列可视化
# 创建时间序列数据
ts_df = pd.DataFrame({
'date': pd.date_range('2025-01-01', periods=365, freq='D'),
'value': np.random.randn(365).cumsum() + 100
})
ts_df.set_index('date', inplace=True)
# 时间序列折线图
ts_df.plot(figsize=(14, 6), title='时间序列趋势',
linewidth=2, color='navy')
# 重采样可视化
ts_df.resample('M').mean().plot(marker='o', figsize=(12, 6),
title='月度平均趋势')
# 滚动平均
ts_df['rolling_mean'] = ts_df['value'].rolling(window=30).mean()
ts_df.plot(figsize=(14, 6),
title='原始值与30日滚动平均')
🚀 五、高级可视化技巧
1. 双Y轴图表
fig, ax1 = plt.subplots(figsize=(12, 6))
# 左Y轴
ax1.plot(df.index, df['销售额'], 'b-', label='销售额')
ax1.set_xlabel('索引')
ax1.set_ylabel('销售额', color='b')
ax1.tick_params(axis='y', labelcolor='b')
# 右Y轴
ax2 = ax1.twinx()
ax2.plot(df.index, df['利润'], 'r-', label='利润')
ax2.set_ylabel('利润', color='r')
ax2.tick_params(axis='y', labelcolor='r')
plt.title('双Y轴图表')
fig.tight_layout()
2. 条件格式化表格
# 样式化DataFrame显示
df_style = df.select_dtypes(include=[np.number]).head(10)
df_style.style.background_gradient(cmap='YlGnBu', axis=0)\
.format(precision=2)\
.highlight_max(color='lightgreen')\
.highlight_min(color='lightcoral')
3. 交互式可视化(配合 Plotly)
import plotly.express as px
# 交互式折线图
fig = px.line(df, x='日期', y='销售额',
title='交互式销售趋势',
markers=True)
fig.show()
# 交互式散点图
fig = px.scatter(df, x='成本', y='销售额',
color='类别', size='利润',
title='交互式散点图')
fig.show()
✅ 六、最佳实践建议
| 场景 | 推荐图表 | 说明 |
|---|---|---|
| 趋势分析 | 折线图、面积图 | 展示时间序列变化 |
| 类别比较 | 柱状图、条形图 | 对比不同类别数值 |
| 分布分析 | 直方图、箱线图、密度图 | 了解数据分布特征 |
| 关系分析 | 散点图、热力图 | 探索变量间关系 |
| 占比分析 | 饼图、环形图 | 展示部分与整体关系 |
| 异常检测 | 箱线图、散点图 | 识别离群值 |
| 密集数据 | 六边形分箱图、热力图 | 避免点重叠 |
性能优化提示
# 大数据集可视化优化
# 1. 采样
df_sample = df.sample(n=1000, random_state=42)
# 2. 分箱聚合
df_binned = df.groupby(pd.cut(df['value'], bins=50)).mean()
# 3. 使用更高效的后端
# pip install plotly
# 对于交互式需求,考虑 Plotly 或 Bokeh
📋 七、完整可视化模板
def create_dashboard(df):
"""创建数据可视化仪表板"""
fig, axes = plt.subplots(2, 3, figsize=(18, 12))
# 1. 趋势图
df.plot(x='日期', y='销售额', ax=axes[0, 0],
title='销售趋势', marker='o')
# 2. 分布图
df['销售额'].plot(kind='hist', ax=axes[0, 1],
bins=20, title='销售额分布')
# 3. 箱线图
df.plot(kind='box',
ax=axes[0, 2],
title='指标分布')
# 4. 散点图
df.plot(x='成本', y='销售额', kind='scatter',
ax=axes[1, 0], title='成本-销售关系',
s=50, alpha=0.6)
# 5. 柱状图
df.groupby('类别')['销售额'].sum().plot(
kind='bar', ax=axes[1, 1], title='类别销售对比')
# 6. 相关性热力图
corr = df.select_dtypes(include=[np.number]).corr()
im = axes[1, 2].imshow(corr, cmap='coolwarm', aspect='auto')
axes[1, 2].set_title('相关性矩阵')
plt.colorbar(im, ax=axes[1, 2])
plt.tight_layout()
return fig
# 使用
fig = create_dashboard(df)
plt.show()
如需了解特定场景的可视化方案(如金融数据、时间序列、地理数据等),请告诉我,我可以提供更详细的指导!
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐




所有评论(0)