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

Python绘制分国家年度GDP per capita折线图,实现点击显示国家名称

多国家历年人均GDP交互式折线图实现方案

直接用Plotly循环遍历每个国家的分组数据,就能实现多折线展示+交互功能(悬停/点击时显示对应国家名称),同时修正你原代码里的几个关键问题:

核心思路

  1. 不要把Time和GDP per capita转成字符串,保持数值类型才能正确绘制连续的折线图
  2. 遍历groupby后的每个国家分组,为每个国家单独添加一条折线trace
  3. 利用Plotly原生的交互特性,自动实现悬停显示国家名,点击图例可切换对应折线的显示/隐藏

完整代码示例

import plotly.graph_objects as go
import pandas as pd

# 假设你的原始数据框为all_years_all_countries
# 先确保数据类型正确(如果之前有转字符串的操作,先转回数值)
all_years_all_countries['Time'] = pd.to_numeric(all_years_all_countries['Time'])
all_years_all_countries['GDP per capita'] = pd.to_numeric(all_years_all_countries['GDP per capita'])

# 按国家分组
grouped_data = all_years_all_countries.groupby('Country')

# 创建Plotly图形对象
fig = go.Figure()

# 遍历每个国家的分组数据,添加折线
for country, group in grouped_data:
    fig.add_trace(go.Scatter(
        x=group['Time'],
        y=group['GDP per capita'],
        name=country,  # 交互时显示国家名的核心参数
        mode='lines',  # 指定绘制折线类型
        hoverinfo='x+y+name'  # 悬停时显示年份、GDP数值和国家名
    ))

# 配置图形布局
fig.update_layout(
    title='各国历年人均GDP趋势',
    xaxis_title='年份',
    yaxis_title='人均GDP',
    legend_title='国家',
    hovermode='x unified'  # 可选:鼠标悬停在某一年份时,同步显示所有国家的对应数据
)

# 展示图形
fig.show()

关键说明

  • name=country:这个参数让Plotly在图例和悬停提示中自动关联对应国家名称,点击图例中的国家名可以单独隐藏/显示该国家的折线
  • 数据类型修正:原代码里把数值转成字符串会导致折线图逻辑混乱(字符串会被当作无序分类值),所以必须确保Time和GDP per capita是数值类型
  • 交互优化:hovermode='x unified'可以让你在对比同一时期不同国家的GDP数据时更直观

内容的提问来源于stack exchange,提问作者Yehor Prydvor Serdyuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:35:33