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

Python中如何将按年份分列的宽表转换为长表用于matplotlib绘图

宽表转长表+散点图绘制实现方案

用pandas内置的长宽表转换方法即可,1万条数据的转换是毫秒级,不需要手动处理任何数据,全程代码自动化完成。

具体操作步骤

  • 导入依赖库
    核心用pandas做数据处理,matplotlib做可视化,先导入两个库:
    import pandas as pd
    import matplotlib.pyplot as plt
    
  • 读取原始宽表数据
    根据你的文件格式用对应方法读取即可,以csv格式为例:
    # 替换成你自己的文件路径
    df_wide = pd.read_csv("gdp_growth_data.csv")
    
    读取后可以用print(df_wide.columns)确认列结构:第一列为国家名称,后续列均为1950-2021的年份列即可。
  • 一行代码完成宽表转长表
    用pandas的melt方法实现长宽表转换,这是最高效的向量化实现,比手写循环快上百倍:
    df_long = df_wide.melt(
        id_vars="国家名称",  # 保留不做转换的标识列
        var_name="年份",     # 转换后原列名存储的字段名
        value_name="GDP增速" # 转换后原单元格数值存储的字段名
    )
    
    # 若年份列读入后是字符串格式,转成整数避免绘图时X轴排序错乱
    df_long["年份"] = df_long["年份"].astype(int)
    
    转换完成后可以用print(df_long.head())抽查结果,每行对应一个国家-年份的GDP增速数据,完全符合你需要的长表结构。
  • 绘制要求的散点图
    按国家分组遍历绘图,每个国家作为独立数据系列:
    plt.figure(figsize=(12, 6), dpi=100)
    
    # 按国家分组生成独立散点系列
    for country_name, data in df_long.groupby("国家名称"):
        plt.scatter(
            x=data["年份"],
            y=data["GDP增速"],
            label=country_name,
            alpha=0.6 # 加透明度缓解点重叠遮挡问题
        )
    
    # 图表标注设置
    plt.xlabel("年份")
    plt.ylabel("GDP增速(%)")
    plt.title("1950-2021年各国GDP增速变化")
    # 图例放在绘图区外侧,避免遮挡数据
    plt.legend(bbox_to_anchor=(1.02, 1), loc="upper left", borderaxespad=0)
    plt.tight_layout() # 自动调整布局避免标签被截断
    plt.show()
    

小提示:如果涉及的国家数量过多,图例过长影响观感,可以按需筛选重点国家绘图,或者关闭图例展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:24:16