Python中pandas plot如何将分组数据绘制到同一张图上?
比如一张收款表 类型|时间|累计金额 ---|:--:|---: 首付款|2018-1-1|50000 终验款|2018-7-1|60000 ....
我用 df.groupby('类型’).plot(x='时间',y='金额', kind='line')画出来是多幅图,每图一根曲线。 然而我希望的是一张图上多条曲线,有高人知道吗?
Python中pandas plot如何将分组数据绘制到同一张图上?
2 回复
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 创建示例数据
np.random.seed(42)
dates = pd.date_range('2023-01-01', periods=100, freq='D')
groups = ['A', 'B', 'C']
data = {
'date': np.repeat(dates, 3),
'group': np.tile(groups, 100),
'value': np.random.randn(300).cumsum() + 50
}
df = pd.DataFrame(data)
# 方法1:使用pivot_table + plot(适合时间序列)
plt.figure(figsize=(12, 6))
df_pivot = df.pivot_table(index='date', columns='group', values='value')
df_pivot.plot()
plt.title('各组数据趋势对比')
plt.xlabel('日期')
plt.ylabel('数值')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
# 方法2:使用groupby循环绘制(更灵活)
plt.figure(figsize=(12, 6))
for name, group in df.groupby('group'):
plt.plot(group['date'], group['value'], label=name, linewidth=2)
plt.title('各组数据趋势对比')
plt.xlabel('日期')
plt.ylabel('数值')
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
# 方法3:使用seaborn(统计绘图更便捷)
import seaborn as sns
plt.figure(figsize=(12, 6))
sns.lineplot(data=df, x='date', y='value', hue='group', linewidth=2)
plt.title('各组数据趋势对比')
plt.xlabel('日期')
plt.ylabel('数值')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
核心要点:
pivot_table转置后直接plot最简洁groupby循环绘制控制最灵活- seaborn的
hue参数自动处理分组着色
一句话建议: 根据数据结构和需求选择合适的方法,pivot适合规整数据,groupby循环最通用。
话说 v2 这个 markdown 是假的吗?

