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

Python中Altair双值折线图颜色与图例异常问题求助

问题与解决方案:Altair折线图颜色及图例异常修复

问题描述

使用Altair绘制包含BER-NRZ、BER-RZ两个数值的折线图,要求两条折线用不同颜色并显示对应侧边图例,但生成的图表仅显示一种颜色,且图例标注为undefined。

原代码如下:

chart = alt.Chart(hlos_sort_csv).mark_line().encode(
    x=alt.X('d', title = 'Distance'),
    y=alt.Y('BER-NRZ', title='BER'),
    color=alt.Color('Origin:N', legend=alt.Legend(title='Modulation')),
    tooltip=['d', 'BER-NRZ']
).properties(
    width=400,
    height=300,
    title='BER vs Distance'
)

chart += alt.Chart(hlos_sort_csv).mark_line().encode(
    x=alt.X('d', title = 'Distance'),
    y=alt.Y('BER-RZ', title='BER'),
    color=alt.Color(value='#FF0000', legend=alt.Legend(title='Modulation')),
    tooltip=['d', 'BER-RZ']
).properties(
    width=400,
    height=300,
    title='BER vs Distance'
)

chart.configure_axis(
    labelFontSize=12,
    titleFontSize=14
).configure_title(
    fontSize=16
).configure_legend(
    title=None,
    direction='vertical',
    labelFontSize=12,
    symbolSize=100
)

chart

期望效果:
目标图表

实际效果:
实际图表

问题原因

  1. 两个独立图表叠加时颜色编码规则不统一:第一个图表用字段Origin映射颜色,第二个直接用固定颜色值value='#FF0000',Altair无法将两种规则合并为统一图例,导致图例异常。
  2. 固定颜色值的编码方式不会生成图例项,且与字段映射的颜色冲突,最终只显示一种颜色。

修复方案

将宽格式数据转换为长格式(使用fold转换),让两个BER系列共享同一个颜色映射字段,自动生成正确图例并区分颜色。

修正后的代码:

chart = alt.Chart(hlos_sort_csv).transform_fold(
    ['BER-NRZ', 'BER-RZ'],  # 指定要转换的数值列
    as_=['Modulation', 'BER']  # 转换后的类别字段、数值字段名
).mark_line().encode(
    x=alt.X('d', title='Distance'),
    y=alt.Y('BER:Q', title='BER'),
    color=alt.Color('Modulation:N', legend=alt.Legend(title='Modulation')),
    tooltip=['d', 'Modulation', 'BER']
).properties(
    width=400,
    height=300,
    title='BER vs Distance'
).configure_axis(
    labelFontSize=12,
    titleFontSize=14
).configure_title(
    fontSize=16
).configure_legend(
    direction='vertical',
    labelFontSize=12,
    symbolSize=100
)

chart

说明

  • transform_fold将宽格式的BER-NRZ、BER-RZ列转换为长格式,生成Modulation(对应NRZ/RZ类别)和BER(对应数值)两个字段。
  • 颜色直接映射到Modulation字段,Altair会自动分配不同颜色并生成对应图例。
  • 统一的编码规则确保两条折线的样式和图例保持一致,符合预期效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:37:59