如何修改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
相关产品推荐
相关产品推荐

