Python绘制分国家年度GDP per capita折线图,实现点击显示国家名称
多国家历年人均GDP交互式折线图实现方案
直接用Plotly循环遍历每个国家的分组数据,就能实现多折线展示+交互功能(悬停/点击时显示对应国家名称),同时修正你原代码里的几个关键问题:
核心思路
- 不要把
Time和GDP per capita转成字符串,保持数值类型才能正确绘制连续的折线图 - 遍历
groupby后的每个国家分组,为每个国家单独添加一条折线trace - 利用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
相关产品推荐
相关产品推荐

