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

Python实现同一画布绘制多站点年度观测数据折线图

多站点观测数据折线图实现方案

方案1:Seaborn 一键绘图(无需手动数据转换)

这是最简便的实现方式,无需对原DataFrame做结构调整,直接通过分组参数实现不同站点着色:

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

# 假设你的原DataFrame名为df
# 可选操作:如果0值是缺测而非真实观测值,可提前替换为空值避免折线异常跌落
df['observations'] = df['observations'].replace(0, np.nan)

sns.lineplot(
    x="year", 
    y="observations", 
    hue="station",  # 按站点分组,自动分配不同颜色
    data=df,
    marker="o"  # 可选:给数据点加标记更清晰
)

plt.xticks(rotation=45)  # 可选:x轴年份旋转避免重叠
plt.xlabel("年份")
plt.ylabel("观测值")
plt.title("各站点年度观测值变化")
plt.legend(title="站点编号")
plt.show()

方案2:Pivot Table + Matplotlib 绘图(解决你之前pivot失败的问题)

你之前用pivot table失败大概率是维度参数设置错误,正确的转换方式如下:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# 可选操作:替换缺测0值
df['observations'] = df['observations'].replace(0, np.nan)

# 转换数据结构:行为年份,列为站点,值为观测值
df_pivot = df.pivot(
    index="year",
    columns="station",
    values="observations"
)

# 直接绘图
df_pivot.plot(
    kind="line",
    figsize=(10,6),
    marker="o"
)

plt.xlabel("年份")
plt.ylabel("观测值")
plt.title("各站点年度观测值变化")
plt.legend(title="站点编号")
plt.xticks(rotation=45)
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:24:01