Matplotlib中对数轴上的小刻度

Cod*_*Cat 3 matplotlib

我有一个带对数x轴和y轴的散点图(因为我主要对两者的较低值感兴趣).

但是,我希望刻度标签是十进制格式,而不是10 ^ x.

我正在使用这个:

# axis limits:
ax.set_xlim(xmin=0, xmax = 1.2)
ax.set_ylim(ymin=0,ymax=1000)

# log scales:
ax.set_yscale('log')
ax.set_xscale('log')

# set y-ticks:
ax.set_yticks((1,10,100,1000))
ax.set_yticklabels(("1","10","100","1000"))
Run Code Online (Sandbox Code Playgroud)

这有效(虽然引入ax.set_yscale('log')ax.set_xscale('log')提出以下警告(任何想法是什么?):

Warning (from warnings module):
  File "C:\Python27\lib\site-packages\numpy\ma\core.py", line 3785
warnings.warn("Warning: converting a masked element to nan.")
UserWarning: Warning: converting a masked element to nan.
Run Code Online (Sandbox Code Playgroud)

但是当我为x轴尝试相同的时候,我得到一个MaskError:

# set x-ticks:
ax.set_xticks((0, 0.2, 0.4, 0.8, 1))
ax.set_xticklabels(("0", "0.2", "0.4", "0.8", "1"))

[snip long long traceback]
File "C:\Python27\lib\site-packages\numpy\ma\core.py", line 3795, in __int__
  raise MaskError, 'Cannot convert masked element to a Python int.'
MaskError: Cannot convert masked element to a Python int.
Run Code Online (Sandbox Code Playgroud)

我认为这与次要与主要蜱有关.我试图玩自动收报机,但最后总是遇到同样的错误.

对于任何帮助,我都非常感激!

回答后编辑: 更换问题解决了

ax.set_yticks((1,10,100,1000))
ax.set_yticklabels(("1","10","100","1000"))
ax.set_xticks((0, 0.2, 0.4, 0.8, 1))
ax.set_xticklabels(("0", "0.2", "0.4", "0.8", "1"))
Run Code Online (Sandbox Code Playgroud)

ax.yaxis.set_major_formatter(FormatStrFormatter('%1.0f'))
ax.xaxis.set_major_formatter(FormatStrFormatter('%.1f'))
ax.xaxis.set_minor_formatter(FormatStrFormatter('%.1f'))
Run Code Online (Sandbox Code Playgroud)

ims*_*msc 8

您可以使用ticker:

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

fig = plt.figure(1, [5,4])
ax = fig.add_subplot(111)

ax.plot( range(1,100) , range(1,100) ,  color='#aaaaff')
ax.set_xscale('log')
ax.xaxis.set_major_formatter(FormatStrFormatter('%.03f'))
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述