如何在Python Plotly Graphic Objects图表的标记标签添加货币符号
在Plotly Graphic Objects条形图标记标签中添加货币符号的方法
要让条形图的标记标签显示带欧元符号的格式(比如€0.15),可以通过两种简单方式实现,以下是具体修改方案:
方法一:直接拼接货币符号到标记文本
原代码中你把数值里的欧元符号去掉了,导致标记标签只显示纯数字。可以在给text参数赋值时,用列表推导式给每个有效数值加上欧元符号,同时处理空值情况:
修改添加trace的代码部分:
annual_bar_chart.add_trace(go.Bar( x=monthly_comparison_result[0], y=monthly_comparison_result[1], name='2021', # 给非空数值添加€前缀,空值则显示空字符串 text=[f"€{val}" if val else "" for val in monthly_comparison_result[1]], textposition="outside", textfont=dict(family="sans serif",size=18,color="black") )) annual_bar_chart.add_trace(go.Bar( x=monthly_comparison_result[0], y=monthly_comparison_result[2], name='2022', text=[f"€{val}" if val else "" for val in monthly_comparison_result[2]], textposition="outside", textfont=dict(family="sans serif",size=18,color="black") )) annual_bar_chart.add_trace(go.Bar( x=monthly_comparison_result[0], y=monthly_comparison_result[3], name='2023', text=[f"€{val}" if val else "" for val in monthly_comparison_result[3]], textposition="outside", textfont=dict(family="sans serif",size=18,color="black") ))
方法二:使用Plotly的texttemplate参数自动格式化
这种方法不需要手动拼接符号,直接通过texttemplate指定格式,Plotly会自动把y轴数值转换成带欧元符号的标签,还能统一控制小数位数:
修改添加trace的代码部分,替换原text参数为texttemplate:
annual_bar_chart.add_trace(go.Bar( x=monthly_comparison_result[0], y=monthly_comparison_result[1], name='2021', # 自动格式化标签,保留两位小数并添加€ texttemplate="€%{y:.2f}", textposition="outside", textfont=dict(family="sans serif",size=18,color="black") )) annual_bar_chart.add_trace(go.Bar( x=monthly_comparison_result[0], y=monthly_comparison_result[2], name='2022', texttemplate="€%{y:.2f}", textposition="outside", textfont=dict(family="sans serif",size=18,color="black") )) annual_bar_chart.add_trace(go.Bar( x=monthly_comparison_result[0], y=monthly_comparison_result[3], name='2023', # 处理空值,避免显示€nan texttemplate=["€%{y:.2f}" if val else "" for val in monthly_comparison_result[3]], textposition="outside", textfont=dict(family="sans serif",size=18,color="black") ))
注意:如果y轴存在空值(比如2023年部分月份),需要结合条件判断避免显示
€nan,或者提前把空值转换成0。
额外优化:简化数组处理代码
原代码中处理monthly_comparison_result的循环可以简化为列表推导式,更简洁高效:
# 转置前12行(月份行)的数据 monthly_comparison_result = list(map(list, zip(*dividend_monthly_comparison[:12]))) # 批量处理数值列(第1、2、3列),去除欧元符号并替换逗号为点 for col in range(1, 4): monthly_comparison_result[col] = [val[1:].replace(",", ".") if val else "" for val in monthly_comparison_result[col]]
完整修改后代码示例(方法一)
from tkinter import * from tkinter import ttk import plotly.graph_objects as go window = Tk() dividend_monthly_comparison = [ ['Ianuarie', '€0,03', '€0,49', ''], ['Februarie', '€0,11', '€1,01', ''], ['Martie', '€0,09', '€0,56', ''], ['Aprilie', '€0,08', '€0,85', ''], ['Mai', '€0,47', '€0,85', ''], ['Iunie', '€0,18', '€0,88', ''], ['Iulie', '€0,34', '€0,99', ''], ['August', '€0,82', '€1,05', ''], ['Septembrie', '€0,21', '', ''], ['Octombrie', '€0,62', '', ''], ['Noiembrie', '€1,09', '', ''], ['Decembrie', '€0,50', '', ''], ['Total', '€4,55', '€6,68', '€0,00'] ] # 转置并处理数据 monthly_comparison_result = list(map(list, zip(*dividend_monthly_comparison[:12]))) for col in range(1, 4): monthly_comparison_result[col] = [val[1:].replace(",", ".") if val else "" for val in monthly_comparison_result[col]] annual_bar_chart = go.Figure() # 添加2021年数据 annual_bar_chart.add_trace(go.Bar( x=monthly_comparison_result[0], y=monthly_comparison_result[1], name='2021', text=[f"€{val}" if val else "" for val in monthly_comparison_result[1]], textposition="outside", textfont=dict(family="sans serif",size=18,color="black") )) # 添加2022年数据 annual_bar_chart.add_trace(go.Bar( x=monthly_comparison_result[0], y=monthly_comparison_result[2], name='2022', text=[f"€{val}" if val else "" for val in monthly_comparison_result[2]], textposition="outside", textfont=dict(family="sans serif",size=18,color="black") )) # 添加2023年数据 annual_bar_chart.add_trace(go.Bar( x=monthly_comparison_result[0], y=monthly_comparison_result[3], name='2023', text=[f"€{val}" if val else "" for val in monthly_comparison_result[3]], textposition="outside", textfont=dict(family="sans serif",size=18,color="black") )) annual_bar_chart.update_layout( barmode='group', xaxis_tickangle=-45, autotypenumbers='convert types', margin=dict(l=0, r=0, b=0, t=0, pad=0), title_font_size=40, paper_bgcolor='#f0f0f0', plot_bgcolor="#f0f0f0", autosize=True, showlegend=True, width=1830, height=500, yaxis_tickprefix='€', yaxis_tickformat=',.' ) annual_bar_chart.show()
内容的提问来源于stack exchange,提问作者iAmStefan
相关产品推荐
相关产品推荐

