我使用python
库处理matplot
中的地块。我必须生成的数字非常大,轴上的刻度也很大,需要占用大量空间。我试图将它们作为一种力量来呈现(例如,我想要得到10 ^ 8的刻度为100000000)。我使用了命令:ax.ticklabel_format(style='sci', axis='x', scilimits=(0,4))
但是这只创建了这样的东西
是否还有其他解决办法让图表的刻度为:1 x 10 ^ 4,2 x 10 ^ 4等,或者在标签的刻度末尾将值1e4写为10 ^ 4?
答案 0 :(得分:3)
您可以使用matplotlib.ticker
模块,并将ax.xaxis.set_major_formatter
设置为FuncFormatter
。
例如:
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格式字符串大括号所需的双括号。
答案 1 :(得分:0)
可能有更好的解决方案,但如果您知道每个xtick的值,您也可以手动命名它们。 这是一个例子: http://matplotlib.org/examples/ticks_and_spines/ticklabels_demo_rotation.html