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

Plotly折线图添加color='Club'后线条断开,如何强制连接?

解决Plotly折线图按俱乐部分组后线条断开的问题

问题根源

线条断开的核心原因是:你的原始数据中,单个俱乐部并非在所有年份都有对应的评分数据(比如球员转会后,旧俱乐部在后续年份没有该球员的数据)。connectgaps=True仅能补全同一条折线内部连续的缺失值(即已有年份但评分空值的情况),但无法处理「某俱乐部完全缺失某年份数据行」的情况,因此线条会出现断裂。

解决方案步骤

1. 将宽格式数据转为长格式

原始数据是2017-2023作为列的宽格式,需先转成「年份-俱乐部-评分」的长格式,方便后续补全数据:

import pandas as pd
import plotly.express as px

# 示例原始数据结构(替换为你的真实数据)
df = pd.DataFrame({
    'player': ['Messi', 'Ronaldo', 'Neymar'],
    'club': ['Barcelona', 'Real Madrid', 'PSG'],
    '2017': [94, 93, 92],
    '2018': [94, 93, 91],
    '2019': [93, 92, 91],
    '2020': [92, 91, 90],
    '2021': [91, 90, 89],
    '2022': [90, 89, 88],
    '2023': [89, 88, 87]
})

# 转长格式
df_long = df.melt(id_vars=['player', 'club'], var_name='Year', value_name='Overall')
df_long['Year'] = df_long['Year'].astype(int)

2. 补全俱乐部的年份缺失数据

生成所有俱乐部与所有年份的组合,填补每个俱乐部在缺失年份的评分值(这里用前后填充,也可根据需求选用均值、插值等方式):

# 生成所有俱乐部和2017-2023年份的全组合
all_clubs = df['club'].unique()
all_years = list(range(2017, 2024))
full_index = pd.MultiIndex.from_product([all_clubs, all_years], names=['club', 'Year'])

# 重新索引并填充缺失值
df_full = df_long.set_index(['club', 'Year']).reindex(full_index).reset_index()
# 按俱乐部分组,用前值+后值填充,确保所有年份都有数据
df_full['Overall'] = df_full.groupby('club')['Overall'].ffill().bfill()

3. 重新绘制连续折线图

此时每个俱乐部在所有年份都有完整的评分数据,绘制的折线会自然连续:

fig = px.line(df_full, x='Year', y='Overall', color='club')
fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:46:19