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

Pyplot中去除科学计数法刻度中的.0

Pyplot中去除科学计数法刻度中的.0

我来帮你解决这个问题!你想保留Pyplot y轴的科学计数法(就是右上角的那个指数标识),但又要把刻度上的.0去掉(比如把1.0改成1),同时不能用set_yticks因为会丢失整体的科学计数法样式,对吧?其实用自定义刻度格式化器就能完美搞定~

核心思路

当Matplotlib开启科学计数法后,y轴的刻度值本质是系数部分(比如右上角显示1e6时,刻度的实际值是1.0、2.0这类浮点数),我们只需要把这些系数从带.0的浮点数转成整数形式,就能去掉多余的.0,同时右上角的科学计数法指数会完整保留。

完整代码示例

import matplotlib.pyplot as plt
import numpy as np

# 生成测试数据(让y轴自动触发科学计数法)
x = np.linspace(0, 10, 100)
y = np.exp(x) * 1e-6  # 数值范围会自动触发科学计数法显示

fig, ax = plt.subplots()
ax.plot(x, y)

# 第一步:开启y轴科学计数法,确保右上角的指数标识保留
ax.ticklabel_format(axis='y', style='sci', scilimits=(0, 0))

# 第二步:自定义刻度格式化器,处理刻度的系数部分
from matplotlib.ticker import FuncFormatter

def format_y_tick(value, pos):
    # 把浮点数系数转成整数(比如1.0→1)
    return f"{int(value)}"

# 将格式化器绑定到y轴主刻度
ax.yaxis.set_major_formatter(FuncFormatter(format_y_tick))

plt.show()

灵活扩展

如果你的数据里既有整数系数(比如1.0)又有小数系数(比如1.5),可以修改格式化函数,让它智能判断:

def format_y_tick(value, pos):
    # 整数系数显示为整数,小数系数保留原小数
    return f"{int(value) if value.is_integer() else value}"

这样1.0会变成1,1.5依然显示1.5,兼顾两种情况。

备注:内容来源于stack exchange,提问作者jushou1302

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 20:05:27