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

如何在Streamlit中格式化ECharts数据标签为两位小数

解决Streamlit中ECharts柱状图标签保留两位小数的问题

问题背景

在原生ECharts中可通过JS函数形式的formatter实现标签保留两位小数,但在Streamlit中使用st_echarts时,配置选项需存入Python字典,无法直接传递JS函数,导致函数形式的formatter失效。

可行解决方案

方案1:使用ECharts字符串格式化语法

ECharts支持在formatter字符串中直接指定数值格式,无需编写JS函数,通过{@字段名:.2f}的语法即可实现保留两位小数。

修改后的完整代码:

import streamlit as st   
from streamlit_echarts import st_echarts
import pandas as pd

data = {
  "X": ['A','B','C'],
  "Y": [420.2456245, 380.2456254742, 390.2345624564],
}
df = pd.DataFrame(data)
dfec = [df.columns.tolist()] + df.values.tolist()

ec_option = {
            "dataset": [
                {"source": dfec}
            ],
            "xAxis": {"type": "category"},
            "yAxis": {},
            "series": [
                {
                    "name": "Y", 
                    "type": "bar", 
                    "symbol": "none", 
                    "encode": {"x": 'X', "y": 'Y'},
                    'label': {
                        'show': True,
                        'position': 'top',
                        'formatter': '{@Y:.2f}'  # 格式化语法保留两位小数
                    },
                },
            ],
            "legend": {},
        }

st_echarts(options=ec_option)

方案2:在Python端预处理数据

提前对DataFrame中的Y列数据进行格式化,保留两位小数后再传入ECharts配置:

import streamlit as st   
from streamlit_echarts import st_echarts
import pandas as pd

data = {
  "X": ['A','B','C'],
  "Y": [420.2456245, 380.2456254742, 390.2345624564],
}
df = pd.DataFrame(data)
# 预处理数据,保留两位小数
df['Y'] = df['Y'].round(2)
# 可选:转成字符串固定格式,避免科学计数法等问题
# df['Y'] = df['Y'].apply(lambda x: "{:.2f}".format(x))

dfec = [df.columns.tolist()] + df.values.tolist()

ec_option = {
            "dataset": [
                {"source": dfec}
            ],
            "xAxis": {"type": "category"},
            "yAxis": {},
            "series": [
                {
                    "name": "Y", 
                    "type": "bar", 
                    "symbol": "none", 
                    "encode": {"x": 'X', "y": 'Y'},
                    'label': {
                        'show': True,
                        'position': 'top',
                        'formatter': '{@Y}'  # 直接使用预处理后的数值
                    },
                },
            ],
            "legend": {},
        }

st_echarts(options=ec_option)

说明

Python字典最终会被序列化为JSON传递给前端,而JSON不支持函数类型,因此原生ECharts的JS函数式formatter无法在Streamlit中直接使用。上述两种方案均避开了函数传递的问题,可实现标签保留两位小数的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 16:30:02