防止科学记数法

2024-11-27 10:43:00
admin
原创
166
摘要:问题描述:我有以下代码:plt.plot(range(2003,2012,1),range(200300,201200,100)) # several solutions from other questions have not worked, including # plt.ticklabel_forma...

问题描述:

我有以下代码:

plt.plot(range(2003,2012,1),range(200300,201200,100))
# several solutions from other questions have not worked, including
# plt.ticklabel_format(style='sci', axis='x', scilimits=(-1000000,1000000))
# ax.get_xaxis().get_major_formatter().set_useOffset(False)
plt.show()

绘制如下图所示:

阴谋

我如何避免在这里使用科学计数法?ticklabel_format 坏了吗?无法解决实际删除偏移量的问题。

plt.plot(np.arange(1e6, 3 * 1e7, 1e6))
plt.ticklabel_format(useOffset=False)

在此处输入图片描述


解决方案 1:

就您而言,您实际上是想禁用偏移量。使用科学计数法与以偏移量值显示事物是不同的设置。

但是,ax.ticklabel_format(useOffset=False)应该可以起作用(尽管您已将其列为不起作用的事情之一)。

例如:

fig, ax = plt.subplots()
ax.plot(range(2003,2012,1),range(200300,201200,100))
ax.ticklabel_format(useOffset=False)
plt.show()

在此处输入图片描述

如果您想禁用偏移量和科学计数法,您可以使用ax.ticklabel_format(useOffset=False, style='plain')


“偏移量”和“科学计数法”之间的区别

在 matplotlib 轴格式中,“科学计数法”是指显示的数字的乘数,而“偏移量”是单独添加的项。

考虑这个例子:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(1000, 1001, 100)
y = np.linspace(1e-9, 1e9, 100)

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

x 轴将有一个偏移(注意+符号),y 轴将使用科学计数法(作为乘数——没有加号)。

在此处输入图片描述

我们可以分别禁用其中之一。最方便的方法是ax.ticklabel_format方法 (或plt.ticklabel_format)。

例如,如果我们调用:

ax.ticklabel_format(style='plain')

我们将禁用 y 轴上的科学计数法:

在此处输入图片描述

如果我们调用

ax.ticklabel_format(useOffset=False)

我们将禁用 x 轴上的偏移,但保持 y 轴的科学计数法不变:

在此处输入图片描述

最后,我们可以通过以下方式禁用它们:

ax.ticklabel_format(useOffset=False, style='plain')

在此处输入图片描述

解决方案 2:

防止使用科学计数法的另一种方法是使用参数“扩大”不使用科学计数法的区间scilimits=

plt.plot(np.arange(1e6, 3 * 1e7, 1e6))
plt.ticklabel_format(scilimits=(-5, 8))

结果1

此处,如果轴限值小于 10^-5 或大于 10^8,则在轴上使用科学计数法。

默认情况下,小于 10^-5 或大于 10^6的数字使用科学计数法,因此如果刻度的最高值在此区间内,则不使用科学计数法。

因此,

plt.plot(np.arange(50), np.logspace(0, 6));
plt.ylim((0, 1000000))

有科学计数法,因为 1000000=10^6,但由

plt.plot(np.arange(50), np.logspace(0, 6));
plt.ylim((0, 999999));

不是,因为 y 限制 (999999) 小于默认限制 10^6。

scilimits=可以使用的参数更改此默认限制ticklabel_format();只需传递以下格式的元组:(low, high)其中刻度的上限应在间隔内(10^low, 10^high)。例如,在下面的代码(一个极端的例子)中,刻度显示为完整数字,因为np.logspace(0,100)[-1] < 10**101为 True。

plt.plot(np.logspace(0, 8), np.logspace(0, 100));
plt.ticklabel_format(scilimits=(0, 101))

结果2

解决方案 3:

您可以通过以下方式为所有图表全局禁用此功能:

    # Disable scientific notation on axes
    # by setting the threshold exponent very high
    matplotlib.rcParams["axes.formatter.limits"] = (-99, 99)
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1590  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1361  
  信创产品在政府采购中的占比分析随着信息技术的飞速发展以及国家对信息安全重视程度的不断提高,信创产业应运而生并迅速崛起。信创,即信息技术应用创新,旨在实现信息技术领域的自主可控,减少对国外技术的依赖,保障国家信息安全。政府采购作为推动信创产业发展的重要力量,其对信创产品的采购占比情况备受关注。这不仅关系到信创产业的发展前...
信创和国产化的区别   18  
  信创,即信息技术应用创新产业,旨在实现信息技术领域的自主可控,摆脱对国外技术的依赖。近年来,国货国用信创发展势头迅猛,在诸多领域取得了显著成果。这一发展趋势对科技创新产生了深远的推动作用,不仅提升了我国在信息技术领域的自主创新能力,还为经济社会的数字化转型提供了坚实支撑。信创推动核心技术突破信创产业的发展促使企业和科研...
信创工作   18  
  信创技术,即信息技术应用创新产业,旨在实现信息技术领域的自主可控与安全可靠。近年来,信创技术发展迅猛,对中小企业产生了深远的影响,带来了诸多不可忽视的价值。在数字化转型的浪潮中,中小企业面临着激烈的市场竞争和复杂多变的环境,信创技术的出现为它们提供了新的发展机遇和支撑。信创技术对中小企业的影响技术架构变革信创技术促使中...
信创国产化   19  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用