🎬 HoRain云小助手个人主页

 🔥 个人专栏: 《Linux 系列教程》《c语言教程

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

📊 Pandas 数据可视化完整指南

🎯 一、可视化基础设置

📈 二、10种核心图表类型

1️⃣ 折线图 (Line Chart) - 趋势分析

2️⃣ 柱状图 (Bar Chart) - 类别比较

3️⃣ 直方图 (Histogram) - 分布分析

4️⃣ 散点图 (Scatter Plot) - 关系分析

5️⃣ 箱线图 (Box Plot) - 异常值检测

6️⃣ 饼图 (Pie Chart) - 占比分析

7️⃣ 面积图 (Area Chart) - 累积趋势

8️⃣ 热力图 (Heatmap) - 相关性分析

9️⃣ 六边形分箱图 (Hexbin) - 密集数据

🔟 子图布局 (Subplots) - 多图表对比

🎨 三、图表样式定制

常用参数说明

📅 四、时间序列可视化

🚀 五、高级可视化技巧

1. 双Y轴图表

2. 条件格式化表格

3. 交互式可视化(配合 Plotly)

✅ 六、最佳实践建议

性能优化提示

📋 七、完整可视化模板


img

📊 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 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐