原文链接:http://www.juzicode.com/python-module-pandas-plot
Pandas的plot子模块是基于Matplotlib的高级封装,专为DataFrame和Series数据结构设计。它实现了数据可视化与数据分析的无缝衔接,通过简洁的链式调用即可生成专业图表,极大提升数据探索效率。
应用场景
- 时间序列数据趋势分析
- 多维度数据分布比较
- 数据质量快速诊断
- 业务指标自动可视化报表
- 大规模数据抽样展示
- 探索性数据分析(EDA)
安装与导入
pip install pandas
使用方法
1)时间序列折线图
处理时间索引数据,绘制线型图。
# juzicode.com/VX公众号:juzicode
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family'] = ['YouYuan']
plt.rcParams['axes.unicode_minus'] = False
dates = pd.date_range('2023-01-01', periods=30)
df = pd.DataFrame({
'销售额': np.random.randint(50,200,30).cumsum(),
'用户量': np.random.randint(100,500,30)
}, index=dates)
df.plot(title='业务增长趋势',
figsize=(10,5),
secondary_y=['用户量'],
grid=True,
style={'销售额':'g-o', '用户量':'b--'})
plt.savefig('pandas_line.png')

2)多维度柱状图
制作多维柱状图,分组数据对比分析。
# juzicode.com/VX公众号:juzicode
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family'] = ['YouYuan']
plt.rcParams['axes.unicode_minus'] = False
df_group = pd.DataFrame({
'北京': [120, 230, 180],
'上海': [90, 150, 200],
'广州': [80, 170, 210]
}, index=['Q1', 'Q2', 'Q3'])
df_group.plot(kind='bar',
rot=0,
colormap='Paired',
edgecolor='black',
title='地区季度对比')
plt.savefig('pandas_bar.png')

3)绘制饼图
制作圆形饼图。
# juzicode.com/VX公众号:juzicode
pivot_df = pd.pivot_table(df,
values='D',
index=pd.cut(df['A'],5),
columns=pd.cut(df['B'],5))
pivot_df.plot(kind='heatmap',
cmap='YlGnBu',
title='数据交叉热力图')
plt.savefig('pandas_heatmap.png')

4)制作箱体图
制作箱体图
# juzicode.com/VX公众号:juzicode
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['YouYuan']
plt.rcParams['axes.unicode_minus'] = False
import numpy as np
weight = np.random.rand(6,3)*100
fruit=['桔子', '橙子', '西瓜', '苹果', '香蕉', '西红柿']
attri = ['重量','体积','单价']
columns=pd.Index(attri,name='属性')
df = pd.DataFrame(weight,index=fruit,columns=columns)
print('df=\n',df)
df.plot.box()
plt.savefig('7pandas_box.png')

5)交互式探索
结合Jupyter实现动态分析,在jupyter中运行后,会显示columns和kind选项,选择不同的类型会出现不同的绘图,实现交互。
# juzicode.com/VX公众号:juzicode
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family'] = ['YouYuan']
plt.rcParams['axes.unicode_minus'] = False
from ipywidgets import interact
df = pd.DataFrame(np.random.randn(1000, 4), columns=list('ABCD'))
@interact(column=list('ABCD'),
kind=['line','bar','area','hist'])
def dynamic_plot(column='A', kind='line'):
df[column].plot(kind=kind, title=f'{column}列可视化')
plt.show()

6)样式高级定制
保持简洁语法的同时深度定制。
# juzicode.com/VX公众号:juzicode
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family'] = ['YouYuan']
plt.rcParams['axes.unicode_minus'] = False
data = {
'城市': ['北京', '上海', '广州', '北京', '上海', '广州'],
'月份': [1,1,1,2,2,2],
'销售额': [100, 150, 80, 230, 180, 90]
}
df = pd.DataFrame(data)
df_group = df.groupby('城市').sum().reset_index()
ax = df_group.plot(
figsize=(10,6),
style={'北京':'s-', '上海':'D--', '广州':'o:'},
x='城市', y='销售额', # 明确坐标轴字段
title='销售趋势对比'
)
ax.set_facecolor('#F5F5F5')
ax.grid(linestyle=':', linewidth=0.8)
ax.legend(loc='upper left', framealpha=0.5)
ax.annotate('峰值', xy=(1,230), # 调整坐标为实际数据范围
xytext=(0.5,250),
arrowprops=dict(facecolor='red', shrink=0.05))
plt.savefig('6pandas_style.png')

7)数据分布分析
结合 subplots(),生成多种分布图表。
# juzicode.com/VX公众号:juzicode
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family'] = ['YouYuan']
plt.rcParams['axes.unicode_minus'] = False
df = pd.DataFrame(np.random.randn(1000, 4), columns=list('ABCD'))
fig, axes = plt.subplots(2, 2, figsize=(12,8))
df['A'].plot.hist(ax=axes[0,0], bins=30, alpha=0.7) # 直方图
df.plot.scatter(ax=axes[0,1], x='A', y='B') # 散点图
df['C'].plot.kde(ax=axes[1,0]) # 密度图
df.plot.box(ax=axes[1,1]) # 箱线图
plt.tight_layout()
plt.savefig('pandas_dist.png')

总结
Pandas plot核心优势:
- DataFrame原生集成,避免数据转换
- 自动处理索引和标签
- 内置多种可视化类型(hexbin/barh等)
注意事项:
- 复杂图表仍需结合Matplotlib API
- 大数据集建议先抽样再绘图
- 使用
subplots=True
参数自动分面绘图