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

如何修改Plotly图表Y轴的小数点分隔符为逗号?

解决Plotly Y轴小数点分隔符从点改为逗号的问题

针对你代码中Y轴刻度小数点无法替换为逗号的问题,核心原因是tickformat='.2%'仅设置百分比格式,不会改变小数点分隔符;且你遍历annotations的操作对Y轴刻度无效(Y轴刻度不属于annotations)。以下是两种可行的解决方案:

方案一:利用区域本地化配置

Plotly支持通过指定locale参数使用对应地区的数字格式,选择使用逗号作为小数点分隔符的区域(如德语区de-DE、葡萄牙语区pt-BR),配合百分比格式即可实现需求:

修改Y轴配置部分代码为:

fig.update_layout(
    yaxis=dict(
        tickformat='.2%',
        locale='de-DE'  # 该区域默认用逗号作为小数点分隔符
    )
)

方案二:手动自定义刻度文本

如果不想依赖区域设置,可以手动生成Y轴刻度的文本,直接替换小数点为逗号:

首先导入numpy(用于生成刻度值,也可手动指定),然后添加以下代码:

import numpy as np

# 自定义Y轴刻度范围和间隔,可根据你的数据调整
y_min = 0.2
y_max = 0.7
tick_vals = np.arange(y_min, y_max + 0.05, 0.05).round(2)
# 转换为带逗号的百分比文本
tick_text = ["{:.2%}".format(val).replace('.', ',') for val in tick_vals]

# 更新Y轴配置
fig.update_layout(
    yaxis=dict(
        tickvals=tick_vals,
        ticktext=tick_text
    )
)

修改后的完整代码(以方案一为例)

import plotly.graph_objects as go
from plotly.offline import plot

data = [
    ['TabNet', 0.6589, 'FT-Transformer', 0.6570, 'NODE', 0.6347, 'TabTransform', 0.6338, 'MLP', 0.6310, '1D-CNN', 0.5911],
    ['TabNet', 0.6347, 'MLP', 0.6115, '1D-CNN', 0.6013, 'NODE', 0.5315, 'FT-Transformer', 0.2871, 'TabTransform', 0.2156],
    ['TabNet', 0.6645, 'TabTransform', 0.6589, 'NODE', 0.6542, 'FT-Transformer', 0.6421, 'MLP', 0.6050, '1D-CNN', 0.5957],
    ['FT-Transformer', 0.6570, 'TabNet', 0.6525, 'TabTransform', 0.6254, 'NODE', 0.6236, 'MLP', 0.5827, '1D-CNN', 0.5780],
    ['TabNet', 0.6672, 'NODE', 0.6515, 'FT-Transformer', 0.6375, 'MLP', 0.6338, '1D-CNN', 0.5743, 'TabTransform', 0.3503]
]

strategies = ['TA/HI', 'PCA', 'SA', 'UNDER', 'OVER']

architectures = ['1D-CNN', 'FT-Transformer', 'MLP', 'NODE', 'TabNet', 'TabTransform']

colors = {
    '1D-CNN': '#8c564b',
    'FT-Transformer': '#ff7f0e',
    'MLP': '#9467bd',
    'NODE': '#2ca02c',
    'TabNet': '#1f77b4',
    'TabTransform': '#d62728'
}

fig = go.Figure()

for i in range(len(architectures)):
    y_values = []
    text_values = []
    color_values = []
    for j in range(len(strategies)):
        strategy = strategies[j]
        for k in range(len(data[j]) // 2):
            if data[j][k*2] == architectures[i]:
                y_values.append(data[j][k*2+1])
                text_values.append("{:.2%}".format(data[j][k*2+1]).replace('.', ','))
                color_values.append(colors[architectures[i]])
                break
    fig.add_trace(go.Bar(
        name=architectures[i],
        x=strategies,
        y=y_values,
        text=text_values,
        textposition="outside",
        textangle=0,
        textfont=dict(size=14),
        marker=dict(color=color_values)
    ))

fig.update_layout(
    font=dict(size=10),
    plot_bgcolor='rgba(0,0,0,0)',
    barmode='group',
    bargap=0.15,
    bargroupgap=0.1,
    legend=dict(orientation='h', yanchor='bottom', y=1.02, xanchor='center', x=0.5),
    margin=dict(t=100),
    yaxis=dict(
        tickformat='.2%',
        locale='de-DE'
    )
)

fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:47:36