在matplotlib对数轴标签上

时间:2015-08-29 09:09:09

标签: python matplotlib

亲爱的matplotlib社区,

我有一个关于对数轴标记的非常快速的问题,我相信你们中的一个人可以随时回答。

基本上我在matplotlib中有一个日志轴,标签为10 ^ -2,10 ^ -1,10 ^ 0,10 ^ 1,10 ^ 2等

但是,我想要0.01,0.1,1,10,100。

有人可以指导我这个。我尝试了一些选项,例如:

ax.set_xticks([0.01,0.1,1,10,100])

ax.set_xlabels([0.01,0.1,1,10,100])

任何专业提示将不胜感激!

3 个答案:

答案 0 :(得分:2)

首先,您应该拨打A = ( 1 0 ) and B ( 0 ) both have rank 1, but their product, 0, has rank 0 ( 1 ) 代替set_xlabels代替实际的刻度标签。也就是说,至少在我目前的环境中(python 2.7,matplotlib 1.4.3,OS X 10.10)并不总是这样。在通过REPL(例如ipython)中的指令进行指令时,有时需要在调用set_xticklabels之后更新轴。快速做到这一点就是简单地拨打set_xticklabelsgrid(True)。例如:

grid(False)

经验说明:当使用ipython的x = np.logspace(-2,2, 1000) y = np.sin(x) l = [0.01,0.1,1,10,100] plt.semilogx(x,y) plt.gca().set_xticks(l) plt.gca().set_xticklabels(l) plt.grid(True) 魔法粘贴那个要点时,似乎没有必要使用grid(False)技巧(任何人都知道为什么?)

答案 1 :(得分:2)

一种很好的方法是使用matplotlib.ticker模块的FuncFormatter类。结合您自己制作的自定义函数定义,这可以帮助您按照您想要的方式自定义刻度。这个特殊的代码与matplotlib使用的对数标度很好地配合使用。

import numpy as np
import matplotlib.pylab as plt

x = np.linspace(-10,10)
y = np.exp(x)

plt.close('all')

fig,ax = plt.subplots(1,1)
ax.plot(x,y,'bo')
ax.set_yscale('log')

#Placed the import/function definitions here to emphasize
#the working lines of code for this particular task.
from matplotlib.ticker import FuncFormatter

def labeller(x, pos):
    """
    x is the tick value, pos is the position. These args are needed by 
    FuncFormatter.
    """

    if x < 1:
        return '0.'+'0'*(abs(int(np.log10(x)))-1)+\
                format(x/10**(np.floor(np.log10(x))),'.0f')
    else:
        return format(x,'.0f')

#FuncFormatter class instance defined from the function above
custom_formatter = FuncFormatter(labeller)

ax.yaxis.set_major_formatter(custom_formatter)
plt.show()

结果:

enter image description here

答案 2 :(得分:1)

我认为你想要ax.xaxis.set_major_formatter(FormatStrFormatter("%g")),如:

x=[0.1,1,10,100,1000]
y=[-1,0,1,2,3]
fig,ax=plt.subplots()
ax.plot(x,y,'.-')
ax.set_xscale('log')
ax.xaxis.set_major_formatter(FormatStrFormatter("%g"))

示例输出: example output from log plot axis label format change