Как сделать так, чтобы оси совпадали между линиями сетки в matplotlib? - PullRequest
0 голосов
/ 15 мая 2018

В моем простом примере ниже, как сделать так, чтобы значения галочки по оси X отображались между сетками?

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(1)
x = range(10)
y = np.random.random(10)
plt.plot(x,y)
plt.xticks(x)
plt.grid(True)
plt.show()

enter image description here

Следующее делает галочки, чтобы быть там, где я хочу, но линии сетки также перемещаются.

np.random.seed(1)
x = range(10)
y = np.random.random(10)
plt.plot(x,y)
plt.xticks(x)
plt.grid(True)
plt.xticks(np.arange(10)+0.5, x)
plt.show()

enter image description here

Я бы хотел, чтобы результат был: enter image description here

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Вы можете установить второстепенные тики так, чтобы между вашими основными тиками появлялся только 1 минорный тик.Это делается с помощью matplotlib.ticker.AutoMinorLocator.Затем установите линии сетки так, чтобы они появлялись только на незначительных галочках.Вам также нужно сместить свои xtick позиции на 0,5:

from matplotlib.ticker import AutoMinorLocator

np.random.seed(10)

x = range(10)
y = np.random.random(10)
plt.plot(x,y)
plt.xticks(np.arange(0.5,10.5,1), x)
plt.xlim(0,9.5)
plt.ylim(0,1)
minor_locator = AutoMinorLocator(2)
plt.gca().xaxis.set_minor_locator(minor_locator)
plt.grid(which='minor')

plt.show()

enter image description here

Редактировать : у меня проблемы с получением двухAutoMinorLocator с для работы на одной оси.При попытке добавить еще один для оси у, второстепенные тики запутались.Обход, который я нашел, состоит в том, чтобы вручную установить местоположения второстепенных тиков, используя matplotlib.ticker.FixedLocator и передавая в местоположениях второстепенных тиков.

from matplotlib.ticker import AutoMinorLocator
from matplotlib.ticker import FixedLocator
np.random.seed(10)

x = range(10)
y = np.random.random(10)
plt.plot(x,y)
plt.xticks(np.arange(0.5,10.5,1), x)
plt.yticks([0.05,0.15,0.25,0.35,0.45,0.55,0.65,0.75,0.85,0.95,1.05], [0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1])
plt.xlim(0,9.5)
plt.ylim(0,1.05)

minor_locator1 = AutoMinorLocator(2)
minor_locator2 = FixedLocator([0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1])
plt.gca().xaxis.set_minor_locator(minor_locator1)
plt.gca().yaxis.set_minor_locator(minor_locator2)
plt.grid(which='minor')

plt.show()

enter image description here

0 голосов
/ 15 мая 2018

Если вы используете plt.subplots для создания фигуры, вы также получаете объект оси:

f, ax = plt.subplots(1)

Этот интерфейс имеет лучший интерфейс для настройки сетки / тиков.Затем вы можете явно указать значения x для ваших данных, сдвинутые на 0,5 влево.То же самое можно сделать с второстепенными тиками и показать сетку на второстепенных тиках:

f, ax = plt.subplots(1)
ax.set_xticks(range(10))
x_values = np.arange(10) - .5
ax.plot(x_values, np.random.random(10))
ax.set_xticks(x_values, minor=True)
ax.grid(which='minor')

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...