Чтобы продлить ответ @ leal26 в нечто более гибкое (то есть, если мы хотим, чтобы увеличить/кастрюля вокруг участка), мы можем использовать matplotlib.ticker
модуль.
Местоположения клещей можно установить с помощью ax.xaxis.set_major_locator
(и ax.yaxis.set_major_locator
) с ticker.MultipleLocator
, используя base = pi/2
.
Мы можем использовать ticker.FuncFormatter
, чтобы задать формат меток ярлыков (на этот раз с использованием ax.xaxis.set_major_formatter
. Есть несколько особых случаев, которые мы должны учитывать (например, 1 в числителе и/или знаменателе и т. Д.). fracformat
функция ниже.
Заметим также, что мы должны использовать сырые строки (r
префикс) и двойные фигурные скобки для форматирования LaTeX.
реальное преимущество здесь в том, что мы можем легко изменить местоположение галочкой, пределы графика и т. д., без необходимости вручную переопределять метки тика каждый раз.
Наконец, я также немного изменил свой сценарий, чтобы сделать использование объектно-ориентированного approact matplotlib
«s, так что мы создаем Figure
экземпляр с plt.figure
, в Axes
экземпляр (ax
) с fig.add_subplot
, а затем все остальное, мы называем соответствующие функции от ax
.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
from fractions import Fraction
t = np.linspace(0, 4*np.pi, 150)
fig = plt.figure()
ax = fig.add_subplot(111)
theGrid = np.outer(np.sin(t), np.sin(t))
ax.set_xlim(0, 4*np.pi) #forces an exact fit!
ax.set_ylim(0, 4*np.pi) #ditto!
def fracformat(x,pos):
frac = Fraction(x/np.pi)
if frac.numerator == 0:
return 0
elif frac.numerator == frac.denominator:
return r"$\pi$"
elif frac.numerator == 1:
return r"$\frac{{ \pi }}{{ {:2d} }}$".format(frac.denominator)
elif frac.denominator == 1:
return r"${:2d} \pi$".format(frac.numerator)
else:
return r"$\frac{{ {:2d} \pi }}{{ {:2d} }}$".format(frac.numerator,frac.denominator)
ax.xaxis.set_major_locator(ticker.MultipleLocator(np.pi/2.))
ax.yaxis.set_major_locator(ticker.MultipleLocator(np.pi/2.))
ax.xaxis.set_major_formatter(ticker.FuncFormatter(fracformat))
ax.yaxis.set_major_formatter(ticker.FuncFormatter(fracformat))
ax.pcolormesh(t, t, theGrid)
plt.show()
Я увеличил пределы графика в 4*pi
, чтобы показать, как легко распространить это на различные диапазоны, с минимальными усилиями.
http://matplotlib.org/examples/ticks_and_spines/spines_demo_bounds.html –