用科学轴绘图,改变有效数字的数量

时间:2016-01-25 12:31:29

标签: python matplotlib plot

我在matplotlib中制作了以下情节,其中包括plt.ticklabel_format(axis='y',style='sci',scilimits=(0,3))。这样产生y轴:

enter image description here

现在的问题是我希望y轴有来自[0, -2, -4, -6, -8, -12]的刻度。我玩过scilimits,但无济于事。

如何强制蜱只有一个有效数字而没有尾随零,并在需要时浮动?

MWE在下面添加:

import matplotlib.pyplot as plt
import numpy as np

t = np.arange(0.0, 10000.0, 10.)
s = np.sin(np.pi*t)*np.exp(-t*0.0001)

fig, ax = plt.subplots()

ax.tick_params(axis='both', which='major')
plt.ticklabel_format(style='sci', axis='x', scilimits=(0,3))
plt.plot(t,s)

plt.show()

2 个答案:

答案 0 :(得分:1)

当我遇到这个问题时,我能想到的最好的方法是使用自定义FuncFormatter作为刻度线。但是,我发现无法使其与轴一起显示比例(例如1e5)。简单的解决方案是手动将其包含在刻度标签中。

很抱歉,如果这不能完全回答这个问题,但它可以作为一个相对简单的问题解决方案:)

在MWE中我的解决方案看起来有点像这样:

import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
import numpy as np


def tickformat(x):
    if int(x) == float(x):
        return str(int(x))
    else:
        return str(x)        


t = np.arange(0.0, 10000.0, 10.)
s = np.sin(np.pi*t)*np.exp(-t*0.0001)

fig, ax = plt.subplots()

ax.tick_params(axis='both', which='major')
plt.plot(t,s)

fmt = FuncFormatter(lambda x, pos: tickformat(x / 1e3))
ax.xaxis.set_major_formatter(fmt)

plt.xlabel('time ($s 10^3$)')

plt.show()

请注意,该示例操纵 x -axis!

enter image description here

当然,通过重新缩放数据可以更简单地实现这一点。但是,我假设你不想触摸数据而只是操纵轴。

答案 1 :(得分:0)

我没有看到通过 let registrationView = LMRegistration() self.presentViewController(registrationView, animated: true, completion: nil) 上存在的旋钮显而易见的方法。像这样:

ScalarFormatter

enter image description here

将解决您的问题。请注意子类的名称,因为这只是添加本轮(它们看起来像它们可以工作,但只是增加了更多的复杂性)到现有代码。这也涉及图书馆的私人部分,我们可能随时破坏。