我正在mattlotlib中使用plt.ticklabel_format(axis='y',style='sci',scilimits=(0,3))等进行以下绘制。这样会产生一个y轴:

python - 以科学轴作图,更改有效数字-LMLPHP

现在的问题是,我希望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()

最佳答案

当我遇到这个问题时,我能想到的最好的办法是使用一个自定义的 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轴!

python - 以科学轴作图,更改有效数字-LMLPHP

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

关于python - 以科学轴作图,更改有效数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34992685/

10-10 04:49