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

Plotly图表数据不匹配及标签分隔符修改问题求助

Plotly条形图问题修复方案

问题1:条形数值未正确匹配data中的值

原因

原代码遍历所有data行查找架构匹配项,找到第一个符合条件的就停止,导致每个策略对应的条形取的是data中第一个出现该架构的值,而非对应策略行的数值。

修复逻辑

针对每个架构,遍历策略时直接定位到data中对应策略的行(data[j],j为当前策略的索引),在该行内查找匹配的架构,获取对应数值。

问题2:替换条形标签的小数点分隔符为逗号

原因

原代码错误地修改fig.layout.annotations,但Plotly条形的标签存储在每个trace的text属性中,而非annotations。

修复逻辑

  • 生成标签文本时直接将小数点替换为逗号
  • 配置y轴的separators参数,确保刻度显示也使用逗号作为小数点分隔符

修改后的完整代码

import plotly.graph_objects as go
import plotly.io as pio

data = [
    ['FT-Transformer', 0.8102, 'MLP', 0.7790, 'TabNet', 0.7904, 'TabTransform', 0.7960, 'FT-Transformer', 0.7989, 'TabNet', 0.8073],
    ['TabNet', 0.8101, 'TabNet', 0.7592, 'NODE', 0.7790, 'NODE', 0.7847, 'NODE', 0.7904, 'NODE', 0.7818],
    ['NODE', 0.7989, 'NODE', 0.7535, 'TabTransform', 0.7677, 'TabNet', 0.7818, 'MLP', 0.7904, 'FT-Transformer', 0.7790],
    ['MLP', 0.7932, 'FT-Transformer', 0.7375, 'MLP', 0.6742, 'FT-Transformer', 0.7648, 'TabNet', 0.7705, 'TabTransform', 0.7592],
    ['TabTransform', 0.7705, '1D-CNN', 0.7365, '1D-CNN', 0.6685, 'MLP', 0.7082, 'TabTransform', 0.7677, 'MLP', 0.7535],
    ['1D-CNN', 0.6799, 'TabTransform', 0.7337, 'FT-Transformer', 0.5864, '1D-CNN', 0.5609, '1D-CNN', 0.7025, '1D-CNN', 0.7082]
]

strategies = ['TA/HI', 'PCA', 'SA', 'UNDER', 'OVER', 'AUMENTADO']
architectures = ['1D-CNN', 'FT-Transformer', 'MLP', 'NODE', 'TabNet', 'TabTransform']

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

fig = go.Figure()

for arch in architectures:
    y_values = []
    text_values = []
    color_values = []
    for j in range(len(strategies)):
        # 定位到当前策略对应的data行
        current_row = data[j]
        found_val = 0
        # 在当前行中查找匹配的架构
        for l in range(0, len(current_row), 2):
            if current_row[l] == arch:
                found_val = current_row[l+1]
                break
        # 添加数值和格式化后的文本
        y_values.append(found_val)
        # 直接替换小数点为逗号
        percent_text = f"<b>{found_val:.2%}</b>".replace('.', ',')
        text_values.append(percent_text)
        color_values.append(colors[arch])

    fig.add_trace(go.Bar(
        name=arch,
        x=strategies,
        y=y_values,
        text=text_values,
        textposition="outside",
        textangle=0,
        textfont=dict(size=10),
        marker=dict(color=color_values)
    ))

fig.update_layout(
    font=dict(size=12),
    plot_bgcolor='rgba(0,0,0,0)',
    barmode='group',
    bargap=0.1,
    bargroupgap=0.05,
    legend=dict(orientation='h', yanchor='bottom', y=1.02, xanchor='center', x=0.5),
    margin=dict(t=200)
)

# 设置y轴刻度的百分比格式和逗号分隔符
fig.update_layout(
    yaxis=dict(
        tickformat='.2%',
        separators=',.'  # 第一个是小数点分隔符,第二个是千位分隔符
    )
)

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 06:44:59