6.8. Деления осей и подписи к ним

Также как и линии сетки, деления осей бывают основными и вспомогательными. Для управления делениями осей - тиками необходим модуль matplotlib.ticker. Однако, чаще всего, без сетки, от этих делений нет никакого толка. Вот график с вспомогательными делениями без сетки:

import numpy as np
import matplotlib.pyplot as plt
#  Подключаем модуль управления тиками:
import matplotlib.ticker as ticker

x = np.linspace(-10, 10, 200)
y = 0.01*(x + 9)*(x + 6)*(x - 6)*(x - 9)*x

fig, ax = plt.subplots()

ax.plot(x, y, color = 'r', linewidth = 3)

#  Устанавливаем интервал основных делений:
ax.xaxis.set_major_locator(ticker.MultipleLocator(2))
#  Устанавливаем интервал вспомогательных делений:
ax.xaxis.set_minor_locator(ticker.MultipleLocator(1))

#  Тоже самое проделываем с делениями на оси "y":
ax.yaxis.set_major_locator(ticker.MultipleLocator(50))
ax.yaxis.set_minor_locator(ticker.MultipleLocator(10))


fig.set_figwidth(12)
fig.set_figheight(8)

plt.show()

Matplotlib деления осей

Теперь создадим тот же самый график но уже с вспомогательной сеткой:

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

x = np.linspace(-10, 10, 200)
y = 0.01*(x + 9)*(x + 6)*(x - 6)*(x - 9)*x

fig, ax = plt.subplots()

ax.plot(x, y, color = 'r', linewidth = 3)

#  Устанавливаем интервал основных и
#  вспомогательных делений:
ax.xaxis.set_major_locator(ticker.MultipleLocator(2))
ax.xaxis.set_minor_locator(ticker.MultipleLocator(1))
ax.yaxis.set_major_locator(ticker.MultipleLocator(50))
ax.yaxis.set_minor_locator(ticker.MultipleLocator(10))


#  Добавляем линии основной сетки:
ax.grid(which='major',
        color = 'k')

#  Включаем видимость вспомогательных делений:
ax.minorticks_on()
#  Теперь можем отдельно задавать внешний вид
#  вспомогательной сетки:
ax.grid(which='minor',
        color = 'gray',
        linestyle = ':')

fig.set_figwidth(12)
fig.set_figheight(8)

plt.show()

Matplotlib совмещение делений осей с линиями сетки

Как видите так действительно лучше. Хотя в некоторых ситуациях возможны и некоторые казусы. Например вот такие:

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

x = np.linspace(-10, 10, 200)
y = 0.01*(x + 9)*(x + 6)*(x - 6)*(x - 9)*x

fig, ax = plt.subplots()

ax.plot(x, y, color = 'b', linewidth = 10)

#  Устанавливаем интервал основных и
#  вспомогательных делений:
ax.xaxis.set_major_locator(ticker.MultipleLocator(5))
ax.xaxis.set_minor_locator(ticker.MultipleLocator(1))
ax.yaxis.set_major_locator(ticker.MultipleLocator(100))
ax.yaxis.set_minor_locator(ticker.MultipleLocator(50))


#  Добавляем линии основной сетки:
ax.grid(which='major',
        color = 'k',
        linewidth = 10)

#  Включаем видимость вспомогательных делений:
ax.minorticks_on()
#  Теперь можем отдельно задавать внешний вид
#  вспомогательной сетки:
ax.grid(which='minor',
        color = 'red',
        linewidth = 5)

fig.set_figwidth(12)
fig.set_figheight(8)

plt.show()

Matplotlib ограничения в настройке внешнего вида сетки

Во первых, линии вспомогательной сетки не рисуются под линиями основной. Во вторых такие сетки никогда не следует строить. Используйте близкие друг к другу цвета, а линии вспомогательной сетки всегда делайте тоньше и курсивными.

Иногда бывает необходимо настраивать внешний вид меток делений на осях и их подписей:

import numpy as np
import matplotlib.pyplot as plt
#  Подключаем модуль управления тиками:
import matplotlib.ticker as ticker

x = np.linspace(-10, 10, 200)
y = 0.01*(x + 9)*(x + 6)*(x - 6)*(x - 9)*x

fig, ax = plt.subplots()


ax.plot(x, y, color = 'r', linewidth = 3)

#  Устанавливаем интервал основных и
#  вспомогательных делений:
ax.xaxis.set_major_locator(ticker.MultipleLocator(2))
ax.xaxis.set_minor_locator(ticker.MultipleLocator(1))
ax.yaxis.set_major_locator(ticker.MultipleLocator(50))
ax.yaxis.set_minor_locator(ticker.MultipleLocator(10))


#  Настраиваем вид основных тиков:
ax.tick_params(axis = 'both',    #  Применяем параметры к обеим осям
               which = 'major',    #  Применяем параметры к основным делениям
               direction = 'inout',    #  Рисуем деления внутри и снаружи графика
               length = 20,    #  Длинна делений
               width = 4,     #  Ширина делений
               color = 'm',    #  Цвет делений
               pad = 10,    #  Расстояние между черточкой и ее подписью
               labelsize = 15,    #  Размер подписи
               labelcolor = 'r',    #  Цвет подписи
               bottom = True,    #  Рисуем метки снизу
               top = True,    #   сверху
               left = True,    #  слева
               right = True,    #  и справа
               labelbottom = True,    #  Рисуем подписи снизу
               labeltop = True,    #  сверху
               labelleft = True,    #  слева
               labelright = True,    #  и справа
               labelrotation = 45)    #  Поворот подписей


#  Настраиваем вид вспомогательных тиков:
ax.tick_params(axis = 'both',    #  Применяем параметры к обеим осям
               which = 'minor',    #  Применяем параметры к вспомогательным делениям
               direction = 'out',    #  Рисуем деления внутри и снаружи графика
               length = 10,    #  Длинна делений
               width = 2,     #  Ширина делений
               color = 'm',    #  Цвет делений
               pad = 10,    #  Расстояние между черточкой и ее подписью
               labelsize = 15,    #  Размер подписи
               labelcolor = 'r',    #  Цвет подписи
               bottom = True,    #  Рисуем метки снизу
               top = True,    #   сверху
               left = True,    #  слева
               right = True)    #  и справа
               
#  Добавляем линии основной сетки:
ax.grid(which='major',
        color = 'm')

#  Включаем видимость вспомогательных делений:
ax.minorticks_on()

#  Теперь можем отдельно задавать внешний вид
#  вспомогательной сетки:
ax.grid(which='minor',
        color = 'm',
        linestyle = ':')


fig.set_figwidth(12)
fig.set_figheight(8)

plt.show()

Matplotlib управление внешним видом делений осей