一个更好的方法是使用FuncFormatter
from matplotlib.ticker import MultipleLocator
from matplotlib.ticker import FuncFormatter
fig, ax = plt.subplots(1, 1)
def alternate_formatter(x, ind):
rm = np.mod(x, 1)
if np.abs(rm) < .1:
return '{:d}'.format(int(x))
return '{:.1f}'.format(rm)
ax.xaxis.set_major_locator(MultipleLocator(.5))
ax.xaxis.set_major_formatter(FuncFormatter(alternate_formatter))
ax.set_xlim(0, 10)
一种更好的方法(也是一种更改字体大小的简单方法)是也使用小刻度:
from matplotlib.ticker import MultipleLocator
from matplotlib.ticker import FuncFormatter
fig, ax = plt.subplots(1, 1)
def minor_formatter(x, ind):
# only format if we don't overlap with a major tick
if np.mod(x, 1) < .1:
return ''
return '{:.1f}'.format(np.mod(x, 1))
ax.xaxis.set_major_locator(MultipleLocator(1))
ax.xaxis.set_minor_locator(MultipleLocator(.5))
ax.xaxis.set_minor_formatter(FuncFormatter(minor_formatter))
# label size sets the font size, pad sets the distance from the spine
ax.xaxis.set_tick_params(which='minor', labelsize=8, pad=8)
ax.set_xlim(0, 10)
我认为直接使用xticks
是危险的,它可能会无意中将您的数据与轴标签分离。