Ast*_*rid 11 python plot matplotlib
我在matplotlib中制作了以下情节,其中包括其他内容plt.ticklabel_format(axis='y',style='sci',scilimits=(0,3)).这样产生一个y轴:
现在的问题是我希望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()
Run Code Online (Sandbox Code Playgroud)
当我遇到这个问题时,我能想到的最好办法就是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()
Run Code Online (Sandbox Code Playgroud)
请注意,该示例操作的是x轴!
当然,通过重新缩放数据可以更简单地实现这一点。但是,我假设您不想触摸数据而只想操纵轴。