如何在Python Altair图表中将G(Giga)单位替换为B(Billion)
Altair SI单位G替换为B的实现方案
这里提供两种可直接落地的实现方式,按需选择即可:
方法1:纯Python端自定义格式(无需调用JS)
直接通过Altair原生的labelExpr轴标签表达式和自定义tooltip配置实现替换,无需额外引入JS代码,适配所有Altair支持的运行环境:
line1=(alt.Chart(df_combined).mark_bar().encode( x=alt.X('Date:T', axis=alt.Axis(title=None, grid=False, format= '%b-%Y')), y = alt.Y( 'Current Year:Q', axis= alt.Axis( title=None, titleAngle=0, titleY=-20, titleAlign="left", format='s', # 新增这行实现轴标签G替换为B labelExpr="replace(datum.label, 'G', 'B')", titleColor=COLORS_HEX['SMOKEY_BLUE']), ), # 新增tooltip配置,实现提示框内容替换 tooltip=[ alt.Tooltip('Date:T', title='日期', format='%b-%Y'), alt.Tooltip('formatted_val:N', title='当年数值') ], color = alt.value(COLORS_HEX['SMOKEY_BLUE']) ).add_selection(sel_selection).transform_filter(sel_selection) # 预处理数值格式替换 .transform_calculate( formatted_val = "replace(format(datum['Current Year'], '.3s'), 'G', 'B')" ) )
如果需要统一所有图表的格式,直接把labelExpr和transform的逻辑封装成公共函数调用即可。
方法2:Jupyter Notebook中覆写d3格式规则
如果希望全局生效不用每个图表单独配置,可以在Notebook中执行一段JS代码覆写d3的SI前缀规则,后续所有生成的Altair图表都会自动用B代替G:
首先先执行JS注入代码:
from IPython.display import Javascript, display # 执行JS覆写d3的SI单位规则 display(Javascript(""" if (window.d3) { d3.formatPrefixes["G"] = "B"; } // 兼容Altair异步加载d3的时序 setTimeout(() => { if (window.d3) d3.formatPrefixes["G"] = "B"; }, 1000); """))
之后你原来的绘图代码不需要做任何修改,生成的图表坐标轴和工具提示都会自动将G替换为B。
注意:该配置仅在当前Notebook会话生效,重启内核后需要重新执行这段注入代码
内容的提问来源于stack exchange,提问作者rg4stackoverflow
相关产品推荐
相关产品推荐

