Pandas数据可视化指南:从零玩转plot()函数(十一)

一、Pandas可视化基础原理

1.1 绘图引擎架构

Pandas的绘图系统基于Matplotlib构建,采用分层设计:

DataFrame.plot() 
  ↳ pandas.plotting._core.PlotAccessor 
    ↳ matplotlib.pyplot

当调用df.plot()时,Pandas会自动完成以下转换:

  1. 将DataFrame结构解析为Matplotlib可识别的数据结构
  2. 根据kind参数选择对应的绘图方法(plt.plot/plt.bar等)
  3. 应用样式参数生成基础图表
  4. 返回Axes对象供进一步定制

1.2 核心参数解析矩阵

参数 适用图表类型 作用原理 示例值
kind 所有 指定图表类型编码 ‘line’, ‘bar’
subplots 多列数据 创建子图矩阵(mpl.subplots) True/False
layout subplots=True时 控制子图排列方式 (2,3)
stacked 柱状/面积图 控制堆叠模式 True
secondary_y 双轴图 创建次Y轴坐标系 True
colormap 多系列数据 应用颜色映射方案 ‘viridis’, ‘jet’

二、六大核心图表深度解析

2.1 折线图(Line Plot)

数学原理
折线图通过线性插值连接离散数据点,反映数据随时间或其他连续变量的变化趋势。其数学表达式为:
y=f(x)y = f(x)y=f(x)
其中xxx为自变量(通常为时间序列),yyy 为因变量。

应用场景

  • 时间序列分析(股票价格、温度变化)
  • 多指标趋势对比(销售额 vs 成本)
  • 周期性规律发现(月销量波动)

代码示例

# 多指标折线图(带样式定制)
ax = df.plot(
    kind='line',
    x='Date', 
    y=['Revenue', 'Cost'],
    style={
   
   'Revenue': 'g--o', 'Cost': 'r-.s'},  # 分列定义线型
    linewidth=2,
    markersize=8,
    title='营收与成本趋势对比',
    figsize=(12, 6),
    grid=True,
    alpha=0.8,
    subplots=False  # 是否分拆为子图
)

# 添加辅助元素
ax.axvspan('2023-03-01', '2023-05-01', color='yellow', alpha=0.3)  # 高亮区间
ax.annotate('峰值点', 
           xy=('2023-04-15', 9800), 
           xytext=('2023-05-01', 10000),
           arrowprops=dict(facecolor='black', shrink=0.05))
plt.xticks(rotation=45)  # X轴标签旋转
plt.tight_layout()  # 自动调整布局

关键参数详解

参数 类型 作用
style dict 定义每列数据的线型/标记(如 '-o' 表示实线+圆圈标记)
linewidth float 线条宽度(默认1.0)
markersize int 标记尺寸(默认6)
alpha float 透明度(0-1)
subplots bool 拆分多列为独立子图

2.2 柱状图(Bar Plot)

数学原理
柱状图通过高度映射数值大小,适用于分类数据对比。其数学表达为:
高度=f(类别)\text{高度} = f(\text{类别})高度=f(类别)

应用场景

  • 分类数据对比(各城市销售额)
  • 时间维度对比(月销量对比)
  • 堆叠分析(产品类别销售构成)

代码示例

# 堆叠柱状图(带数据标签)
ax = df.groupby('City')['Sales'].sum().plot(
    kind='bar',
    stacked=True,
    color=['#4C72B0', '#DD8452', '#55A868'],  # 自定义颜色
    edgecolor='black',
    width=0.8,
    title='各城市销售额堆叠图',
    rot=45
)

# 添加数值标签
for container in ax.containers:
    ax.bar_label(container, 
                label_type='center',  # 标签位置
                fmt='%.0f',           # 数字格式
                color='white',
                fontsize=10)

# 添加参考线
ax.axhline(y=50000, color='red', linestyle='--', linewidth=1)
ax.text(5.2, 51000, '目标线', color='red')

plt.xlabel('城市', fontsize=12)
plt.ylabel('销售额(万元)', fontsize=12)

进阶技巧

  • 横向柱状图:kind='barh'
  • 百分比堆叠:stacked=True + 数据归一化
  • 误差棒:yerr 参数添加标准差

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值