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

Altair移除长字符串图例省略号并实现图例文本换行

Altair柱状图图例长文本显示与换行解决方案

一、解决图例文本被省略的问题

图例文本被截断是因为默认的长度限制,通过legend的labelLimit参数即可取消或调整限制:

color=alt.Color("fund:N", legend=alt.Legend(
    orient="top",
    labelLimit=0  # 设为0取消长度限制,也可根据需求设具体数值如500
))

二、实现图例文本自动换行

Altair支持两种换行方式,可按需选择:

方法1:预处理数据时插入换行符

直接在DataFrame的fund列中,在合适位置(比如冒号、空格处)插入\n:

# 示例:在冒号后添加换行
df['fund'] = df['fund'].str.replace(': ', ':\n')

# 或按固定字符长度拆分换行
df['fund'] = df['fund'].apply(lambda x: '\n'.join([x[i:i+30] for i in range(0, len(x), 30)]))

方法2:在Altair中用labelExpr动态拆分

借助Vega-Lite的字符串函数,通过labelExpr在图例中实现换行:

color=alt.Color("fund:N", legend=alt.Legend(
    orient="top",
    labelLimit=0,
    # 按冒号拆分后换行,可替换分隔符实现不同拆分逻辑
    labelExpr="split(datum.label, ': ').join(':\\n')"
))

三、完整修改后的代码示例

alt.Chart(df).mark_bar().encode(
    x=alt.X("fund:O", axis=alt.Axis(title=None, labels=False, ticks=False)),
    y=alt.Y("value:Q", axis=alt.Axis(title="占比", grid=True)),
    color=alt.Color("fund:N", legend=alt.Legend(
        orient="top",
        labelLimit=0,
        labelExpr="split(datum.label, ': ').join(':\\n')"
    )),
    tooltip=["数据点信息:O", "fund:N", "value", "bucket"],
    column=alt.Column(
        "bucket:N",
        header=alt.Header(title=None, labelOrient="bottom", labelAngle=x_angle),
        sort=list_to_sort,
        spacing=40,
    ),
).configure_view(stroke="transparent").interactive()

图例示例翻译:"晨星 - FOUSA08OZU: 先锋全债券市场II指数基金机构份额"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:05:01