Python中使用Plotly调整千分位逗号及图表格式问题求助
解决方案
1. Y轴带逗号的百分比格式
通过Plotly的区域设置和自定义刻度格式,实现逗号作为小数分隔符的百分比显示,比如0,00%、50,00%。
2. 条形图数值替换逗号
对格式化后的数值文本做字符串替换,将小数点改为逗号,确保显示为XX,XX%格式。
3. 顶部图例设置
调整Trace添加逻辑,让每个技术(1D-CNN等)作为独立Trace并设置名称,再通过布局参数将图例定位到图表上方。
修改后的完整代码:
import plotly.subplots as sp import plotly.graph_objects as go import numpy as np tecnicas = ['1D-CNN', 'FT-Transformer', 'MLP', 'NODE', 'TabNet', 'TabTransform'] medidas_desempenho = ['T.A/HI', 'PCA', 'S.A', 'UNDER', 'OVER'] dados = np.array([ [59.11, 65.7, 63.1, 63.47, 65.89, 63.38], [60.13, 28.71, 61.15, 53.15, 63.47, 21.56], [59.57, 64.21, 60.5, 65.42, 66.45, 65.89], [57.43, 65.7, 58.27, 62.36, 65.25, 62.54], [57.8, 63.75, 63.38, 65.15, 66.72, 35.03] ]) cores = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b'] fig = sp.make_subplots(rows=len(medidas_desempenho), cols=1, subplot_titles=medidas_desempenho, shared_xaxes=True) dados_formatados = np.around(dados, decimals=2) # 调整循环逻辑:按技术遍历,每个技术在所有子图中生成独立Trace for tech_idx, tech in enumerate(tecnicas): for medida_idx, _ in enumerate(medidas_desempenho): fig.add_trace(go.Bar( x=[tech], y=[dados_formatados[medida_idx][tech_idx]], name=tech, # 设置技术名称作为图例标签 text=['{:.2f}%'.format(dados_formatados[medida_idx][tech_idx]).replace('.', ',')], textposition='outside', marker=dict(color=cores[tech_idx]), hovertemplate=None ), row=medida_idx+1, col=1) fig.update_layout( height=900, barmode='group', showlegend=True, # 开启图例 legend=dict( y=1.1, # 将图例定位到图表上方 orientation='h', # 水平排列 xanchor='center', x=0.5 ), plot_bgcolor='rgba(240,240,240,0.8)', paper_bgcolor='rgba(240,240,240,0.8)', margin=dict(t=100, b=50), # 增加顶部边距避免图例遮挡子图标题 font=dict(family='Arial', size=12, color='black') ) # 设置Y轴刻度为带逗号的百分比格式 fig.update_yaxes( range=[0, 100], tickformat=',.2%', # 逗号分隔小数的百分比格式 locale='pt-br' # 指定区域,确保逗号作为小数分隔符生效 ) fig.show()
关键修改说明:
- Y轴格式:通过
tickformat=',.2%'和locale='pt-br',强制Y轴刻度显示为逗号分隔的百分比格式。 - 条形文本:用
replace('.', ',')将格式化后的小数点替换为逗号,保证数值显示符合要求。 - 图例设置:每个技术作为独立Trace并设置
name,再通过legend参数将图例定位在图表顶部水平居中,同时调整顶部边距避免遮挡内容。
内容的提问来源于stack exchange,提问作者PM92
相关产品推荐
相关产品推荐

