Python绘图:如何将轴上的记号表示为幂?

Python绘图:如何将轴上的记号表示为幂?,python,python-2.7,matplotlib,plot,Python,Python 2.7,Matplotlib,Plot,我使用matplot库在python中处理绘图。我必须生成的数字非常大,所以轴上的刻度也是一个很大的数字,占用了很多空间。我试着将它们表示为一个powers(例如,我想要一个10^8的记号100000000)。我使用命令:ax.ticklabel\u格式(style='sci',axis='x',scilimits=(0,4))但这只创建了类似的内容 是否有其他解决方案可以将绘图的记号设置为:1 x 10^4、2 x 10^4等,或将值1e4写入标签记号的末尾10^4?您可以使用该模块,并将a

我使用
matplot
库在
python
中处理绘图。我必须生成的数字非常大,所以轴上的刻度也是一个很大的数字,占用了很多空间。我试着将它们表示为一个powers(例如,我想要一个10^8的记号100000000)。我使用命令:
ax.ticklabel\u格式(style='sci',axis='x',scilimits=(0,4))
但这只创建了类似的内容

是否有其他解决方案可以将绘图的记号设置为:1 x 10^4、2 x 10^4等,或将值1e4写入标签记号的末尾10^4?

您可以使用该模块,并将
ax.xaxis.set_major\u formatter
设置为a

例如:

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

plt.rcParams['text.usetex'] = True

fig,ax = plt.subplots(1)

x = y = np.arange(0,1.1e4,1e3)
ax.plot(x,y)

def myticks(x,pos):

    if x == 0: return "$0$"

    exponent = int(np.log10(x))
    coeff = x/10**exponent

    return r"${:2.0f} \times 10^{{ {:2d} }}$".format(coeff,exponent)

ax.xaxis.set_major_formatter(ticker.FuncFormatter(myticks))

plt.show()


注意,这使用
LaTeX
格式(
text.usetex=True
)来呈现刻度标签中的指数。还要注意区分
LaTeX
大括号和python格式的字符串大括号所需的双大括号。

可能有更好的解决方案,但如果您知道每个xtick的值,也可以手动命名它们。 以下是一个例子:

@MaMing这不是对数刻度,它只是用科学符号。