计算副刻度位置的对象默认为NullLocator
计算主刻度位置的对象默认为AutoLocator,根据当前的缩放自动计算刻度的位置
设置x轴的主刻度为pi/4的倍数,副刻度为pi/20的倍数,并且主刻度的标签用数学符号的pi显示:
import numpy
import matplotlib
import matplotlib.pyplot as plt
from fractions import Fraction
from matplotlib.ticker import MultipleLocator,FuncFormatter
x=numpy.arange(0,4*numpy.pi,0.01)
fig,ax=plt.subplots(figsize=(8,4))
plt.plot(x,numpy.sin(x),x,numpy.cos(x))
#主刻度文本的计算
def pi_formatter(x,pos):
frac=Fraction(int(numpy.round(x/(numpy.pi/4))),4)
d,n=frac.denominator,frac.numerator
if frac==0:
return '0'
elif frac==1:
return '$\pi$'
elif d==1:
return r'$%d \pi$'%n
elif n==1:
return r'$\frac{\pi}{%d}$'%d
return r'$\frac{%d \pi}{%d}$'%(n,d)
#设置两坐标轴的范围
plt.xlim(0,numpy.max(x))
plt.ylim(-1.5,1.5)
#设置图的底边距
plt.subplots_adjust(bottom=0.15)
#开启网格
plt.grid()
#设置主刻度位置为pi/4的整数倍
ax.xaxis.set_major_locator(MultipleLocator(numpy.pi/4))
#副刻度位置为pi/20的整数倍
ax.xaxis.set_minor_locator(MultipleLocator(numpy.pi/20))
#刻度文本用pi_formatter计算
ax.xaxis.set_major_formatter(FuncFormatter(pi_formatter))
#主刻度文本大小
for label in ax.xaxis.get_ticklabels():
label.set_fontsize(16)
MultipleLocator:以指定值的整数倍为刻度线的放置位置
FuncFormatter:以指定的函数计算刻度文本
它会将刻度值与刻度序号作为参数传递,返回与刻度值对应的刻度文本