You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python绘制符合指定要求的Pandas透视表折线图

解决Pandas折线图不符合需求的问题

先确认数据结构

你的需求要求X轴为日期、每个区域对应一条折线,核心是数据结构要匹配绘图逻辑:

  • 推荐使用宽格式:日期作为索引(或单独列),每一列对应一个区域(ANDAMAN SEA/ARABIAN GULF等),单元格是对应日期的数值
  • 如果是长格式(日期、区域、数值三列),需要先转成宽格式

对应代码实现

情况1:宽格式数据直接绘图

如果你的DataFrame已经是宽格式(比如日期是列,其余列是区域),直接调用plot()即可:

import pandas as pd
import matplotlib.pyplot as plt

# 假设DATE是日期列,其余列是区域
df.plot(x='DATE', kind='line', figsize=(12, 6))

# 美化图表
plt.xlabel('日期')
plt.ylabel('数值')
plt.title('各区域日期数值变化')
plt.legend(title='区域')
plt.xticks(rotation=45) # 旋转日期标签避免重叠
plt.tight_layout()
plt.show()

如果日期是DataFrame的索引,直接去掉x='DATE'参数即可。

情况2:长格式数据转宽格式后绘图

如果你的数据是长格式(三列:日期、区域、数值),先通过pivot转换结构再绘图:

import pandas as pd
import matplotlib.pyplot as plt

# 转换为宽格式:日期做索引,区域做列名,数值为单元格值
df_wide = df.pivot(index='DATE', columns='REGION', values='VALUE')

# 绘图
df_wide.plot(kind='line', figsize=(12, 6))

# 美化图表
plt.xlabel('日期')
plt.ylabel('数值')
plt.title('各区域日期数值变化')
plt.legend(title='区域')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

常见问题排查

  • X轴不是日期格式:先把日期列转为datetime类型,否则会显示为字符串乱序:
    df['DATE'] = pd.to_datetime(df['DATE'])
    
  • 图例不显示区域名称:检查转宽格式时columns参数是否指定了区域列,确保列名就是ANDAMAN SEA这类区域名称
  • 折线显示异常:检查数值范围,必要时手动调整Y轴刻度:
    plt.ylim(min(df_wide.min()) - 1, max(df_wide.max()) + 1) # 根据实际数值调整
    

内容的提问来源于stack exchange,提问作者The Oracle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:35:36