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
相关产品推荐
相关产品推荐

