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

多线时间序列数据制作方法咨询及甘蔗、椰子、水稻产量时间序列绘图异常求助

多线时间序列数据制作与绘图问题解决方案

一、如何制作多线时间序列数据

多线时间序列的核心是清晰的数据结构,我更推荐用「长格式」来存储数据(每个时间点+对应分类+数值),这样后续绘图会省心很多。我用Python的pandas举个实际例子:

  • 先明确需要的结构:
    你需要三列数据:年份(时间维度)、作物类型(分类维度,比如甘蔗/椰子/水稻)、产量(数值维度)。
  • 代码示例(生成模拟数据,你可以替换成自己的真实数据):
    import pandas as pd
    import numpy as np
    
    # 生成2010-2020年的年份列表
    years = pd.date_range(start='2010', end='2020', freq='Y').year
    # 定义作物类型
    crops = ['甘蔗', '椰子', '水稻']
    data = []
    
    # 为每个作物生成带噪声的产量数据
    for crop in crops:
        base_yield = 100 + crops.index(crop)*20  # 不同作物基础产量不同
        yields = np.random.normal(loc=base_yield, scale=10, size=len(years))
        # 将年份、作物、产量打包加入列表
        data.extend(list(zip(years, [crop]*len(years), yields)))
    
    # 转为DataFrame,得到标准长格式数据
    df = pd.DataFrame(data, columns=['年份', '作物类型', '产量'])
    
    如果你手里是宽格式数据(比如每列是一个作物的产量),也可以用pd.melt()转成长格式:
    # 假设宽格式df_wide的结构:年份 | 甘蔗 | 椰子 | 水稻
    df_long = pd.melt(df_wide, id_vars='年份', var_name='作物类型', value_name='产量')
    

二、解决作物产量时间序列图的绘制问题

从你提供的输出图来看,大概率是数据格式不对或者绘图时没有正确区分作物。我给你两种常用的绘图方案,都是Python生态里最常用的:

方案1:用Seaborn快速绘制(推荐,代码简洁易维护)

Seaborn对分类时间序列的支持很好,一行代码就能区分不同作物:

import seaborn as sns
import matplotlib.pyplot as plt

# 设置绘图风格,让图更好看
sns.set_style("whitegrid")

# 创建画布
plt.figure(figsize=(10, 6))
# 绘制多线图:hue参数用来区分不同作物
sns.lineplot(data=df, x='年份', y='产量', hue='作物类型', marker='o', linewidth=2)

# 添加标题和坐标轴标签
plt.title('2010-2020年主要作物产量变化趋势', fontsize=14)
plt.xlabel('年份', fontsize=12)
plt.ylabel('产量', fontsize=12)

# 显示图例并设置标题
plt.legend(title='作物类型')
# 展示图形
plt.show()

方案2:用Matplotlib手动绘制(灵活度更高)

如果你习惯用Matplotlib手动控制细节,可以这样做:

import matplotlib.pyplot as plt

# 先把长格式数据转成宽格式(方便逐个绘制线条)
df_wide = df.pivot(index='年份', columns='作物类型', values='产量')

plt.figure(figsize=(10, 6))
# 遍历每个作物,绘制对应的时间序列
for crop in df_wide.columns:
    plt.plot(df_wide.index, df_wide[crop], marker='o', label=crop, linewidth=2)

# 添加标注
plt.title('2010-2020年主要作物产量变化趋势', fontsize=14)
plt.xlabel('年份', fontsize=12)
plt.ylabel('产量', fontsize=12)
# 显示图例
plt.legend(title='作物类型')
# 添加网格
plt.grid(True, alpha=0.3)
plt.show()

常见问题排查

  • 如果图里线条混乱、没有区分开作物:检查你的数据是否每个作物都有完整的时间序列,有没有缺失值;确保作物类型列是字符串分类类型,不是数值。
  • 如果年份坐标轴显示异常:确认年份列是整数或datetime类型,不是字符串(可以用df['年份'] = pd.to_datetime(df['年份'], format='%Y')转成时间格式)。
  • 如果图例不显示:记得调用plt.legend(),或者在Seaborn的lineplot里指定hue参数。

内容的提问来源于stack exchange,提问作者Emily Essa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 19:52:50