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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:54:25