Вы строите только те же точки х, что и исходные данные в вашем вызове:
ax.plot(M, V, 'go', label='data')
ax.plot(M, func(M, *popt), '-', label='fit')
Чтобы исправить это, вы можете использовать более широкий диапазон - здесь мы используем все значения от 700 до 1200:
toplot = np.arange(700,1200)
ax.plot(toplot, func(toplot, *popt), '-', label='fit')