Вы можете установить второстепенные тики так, чтобы между вашими основными тиками появлялся только 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()

Редактировать : у меня проблемы с получением двух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()
