如何将Plotly箱线图Y轴及悬停框数值转换为‘万’单位?
Plotly箱线图实现中文“万”单位显示方案
方法一:直接转换数据列(最简单直观)
直接将原销售额列转换为“万”单位后绘图,无需复杂配置,所有图表元素(Y轴、悬停文本)都会自动使用转换后的值:
import plotly.express as px # 新增万单位列 df['amt_sales_万'] = df['amt_sales'] / 10000 # 生成箱线图 fig = px.box(df, x='calmonth', y='amt_sales_万') # 配置Y轴:设置中文标题,刻度显示整数 fig.update_yaxes(title='销售额(万)', tickformat='.0f') # 自定义悬停模板,明确标注“万”单位 fig.update_traces(hovertemplate='月份: %{x}<br>销售额: %{y:.0f}万<extra></extra>') fig.show()
方法二:不修改原数据,通过Plotly内置配置实现
如果不想修改原DataFrame,可以通过自定义Y轴刻度和悬停模板来实现单位转换:
import plotly.express as px import numpy as np # 基于原始数据生成箱线图 fig = px.box(df, x='calmonth', y='amt_sales') # 计算Y轴刻度范围,生成以10000为步长的整数刻度值 y_min = df['amt_sales'].min() // 10000 * 10000 y_max = df['amt_sales'].max() // 10000 * 10000 + 10000 tickvals = np.arange(y_min, y_max + 1, 10000) # 将刻度值转换为“X万”的中文文本 ticktext = [f'{val // 10000}万' for val in tickvals] # 更新Y轴配置 fig.update_yaxes( title='销售额(万)', tickvals=tickvals, ticktext=ticktext ) # 自定义悬停模板,将原始数值转换为万单位显示 fig.update_traces( hovertemplate='月份: %{x}<br>销售额: %{y:.0f}万<extra></extra>' ) fig.show()
为什么之前的方法不生效?
hover_data仅用于添加额外的悬停数据,无法覆盖箱线图默认的Y轴数值显示,必须通过hovertemplate统一替换整个悬停内容。- 使用
np.linspace生成刻度容易出现非整数,不如基于数据范围按10000步长生成整数刻度,保证Y轴显示为整数的“万”单位。
内容的提问来源于stack exchange,提问作者Lisen
相关产品推荐
相关产品推荐

