如何解决Plotly共享x轴折线子图出现涂鸦状乱线的问题
Plotly共享x轴折线图乱线问题解决方案
你遇到的乱线问题根源确实是不同过滤分组的x轴分类取值顺序不一致、存在缺失值,Plotly折线默认按传入数据的x顺序连接点,就会出现来回跳转的乱线。你可以按照以下步骤修复:
- 第一步:预定义统一的x轴分类顺序
提前提取所有需要用到的KurzName唯一值,按业务需求指定固定排序,避免不同分组的x轴顺序差异:
import pandas as pd # 提取所有分组的KurzName去重,按你需要的规则排序(示例为字符序,可自定义) all_kurz_names = pd.concat([ df_dict_nValueAgg[time_slice]['KurzName'] for time_slice in ['Erste_15_Minuten', 'Zweite_15_Minuten', 'Dritte_15_Minuten', 'Letzte_15_Minuten'] ]).unique() sorted_x = sorted(all_kurz_names)
- 第二步:对齐所有数据集的x轴顺序,缺失值补空
封装对齐函数,让每个分组的数据集都按统一的x轴顺序重排,缺失的y值填充为NaN,折线遇到NaN会自动断开,不会乱连:
def align_x_data(raw_df, sorted_x_list): # 按统一x顺序重排数据集,缺失值自动填充NaN aligned_df = raw_df.set_index('KurzName').reindex(sorted_x_list).reset_index() return aligned_df
修改你添加trace的逻辑,使用对齐后的数据集:
# 以Erste_15_Minuten的min值trace为例 aligned_df = align_x_data(df_dict_nValueAgg['Erste_15_Minuten'], sorted_x) fig.append_trace(go.Scatter( x=aligned_df['KurzName'], y=aligned_df['min_nValueNorm'], name = "min_nValue_Erste_15_Minuten", mode='lines+markers', connectgaps=False # 显式指定不连接空值,避免异常连线 ), row=2, col=1) # 其余所有trace都按上述逻辑修改即可
- 第三步:全局指定共享x轴的分类规则
在x轴配置中显式指定分类顺序,确保所有子图的x轴完全一致:
fig.update_xaxes( tickangle=45, type='category', # 强制x轴为分类类型,避免Plotly自动识别异常 categoryorder='array', categoryarray=sorted_x # 绑定我们预定义的排序规则 )
完成以上修改后,所有折线的x轴坐标顺序完全统一,缺失点位自动留白,就不会再出现涂鸦状乱线。
内容的提问来源于stack exchange,提问作者Murtaza
相关产品推荐
相关产品推荐

