Skip to content

Instantly share code, notes, and snippets.

Created September 23, 2014 13:06
Show Gist options
  • Save anonymous/dfbcbfe701d37bcaf59b to your computer and use it in GitHub Desktop.
Save anonymous/dfbcbfe701d37bcaf59b to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"kernelspec": {
"codemirror_mode": {
"name": "python",
"version": 2
},
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"name": "",
"signature": "sha256:67b0ebf735cf9ceba4d9761fe1c0146c6caedcaa3fb655c9753459006f449186"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Interactive Curve-Fitting in the IPython Notebook\n",
"\n",
"**Important:** Widgets will not display in \"static\" notebooks until IPython 3.0. They must be backed by a live IPython kernel. Therefore, to view the full widget display, you must download this notebook and run it locally using IPython 2.x or greater."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%matplotlib inline\n",
"from lmfit import Model, Fitter\n",
"import numpy as np"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## `lmfit`\n",
"The [lmfit package](http://cars9.uchicago.edu/software/python/lmfit/) provides layers of high-level interfaces to the nonlinear optimization and curve fitting algorithms in scipy.\n",
"* `Parameter` objects allow fit parameters to be bounded (`min`, `max`) or held fixed (`vary=False`).\n",
"* The `Model` class provides a general way to wrap a user-defined function as a fitting model.\n",
"* `Fitter` provides a curve-fitting workflow akin to popular GUI-based tools while retaining programmatic access to the underlying objects.\n",
"\n",
"`BaseFitter` introduces no new dependencies; `MPLFitter` requires matplotlib; `NotebookFitter` uses IPython's rich display to represent each `Parameter` as a group of IPython widgets. `Fitter` will point to the richest implementation available.\n",
"\n",
"## Interactive Fitting Widget\n",
"\n",
"Select any model from the drop-down menu.\n",
"\n",
"Text input widgets will appear corresponding to the parameters for that model. If the model supports automatic guessing, the values will be initialized according to `model.guess(data, ...)`, and an auto-guess button will be available to re-generate these values at any time.\n",
"\n",
"The values in the text input widgets will serve as an initial guess, and they can be edited by the user. Text inputs for `min` and `max` appear when the associated checkboxes are checked. At all times, `fitter.current_params` is maintained in sync with the values shown in the widget.\n",
"\n",
"When satisfied with the initial guess, click \"Fit\". The plot will update to show the data, the initial guess fit (gray), and the best fit (red). The attribute `fitter.current_result` will contain the result object created by the latest execution of `fit`. The text widgets and the property `fitter.current_params` will be updated from the initial fit to the latest best fit."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"data = np.array([1,2,3,4,5,4,3,2])\n",
"x = np.arange(len(data))\n",
"\n",
"fitter = Fitter(data, x=x)\n",
"\n",
"fitter"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAW4AAAEACAYAAACTXJylAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAH5FJREFUeJzt3XmcnFWV//HPScK+I0IkhC0ghgTRoEAEJKwmEVF0RNmC\ngBGVARWUZeb388l1VARn1LDvSJBFQWRkSRTRIAiKLCFkAZMwmQSQEBYDYYec+eM8bXc6vVV1Vz/1\nVH3fr1e/0kt11elO97du33uee83dERGR8hhQdAEiIlIZBbeISMkouEVESkbBLSJSMgpuEZGSUXCL\niJRMl8FtZleY2RIze7TN+35oZnPN7BEzu8nMNqh9mSIi0qK7EfeVwNh27/stMMLddwb+BpxRi8JE\nRKRjXQa3u98NvNjufXe4+4r8zb8AW9SoNhER6UBv57iPBW7vi0JERKRnqg5uM/t34E13v7YP6xER\nkW4MquaTzOwLwHhgvy5uo01QRESq4O7W3Q26fAG2Bh5t8/ZYYDawSTef593ddz2/AJOKrqHymsdO\nA/d4ybz19XFTi66tGb7/jVC76i/+pSfZ2V074HXAvcAOZrbYzI4FzgXWBe4ws4fN7IKKn06kRhaf\nAxPnr/y+Ly6ARecWU4+I1EKXUyXuflgH776iRrVIL7nPut1sJDD+RJg3HO6fC4vOdZ+lBWSRBlLV\nHHeTmF50AdXIQ/p2MxvjPm960fX0wvSiC+iF6UUX0EvTiy6gl6YXXUCtWT6n0vd3bObe3QS7iIis\npCfZqb1KRERKRsEtIlIyCm4RkZJRcIuIlIyCW0SkZNQOWDZm6wGbA0Pyl807+Hcw8DwwH5jX5mU+\nMB/3V/q/cBHpK2oHrBdmqwHvYdUgbh/KA4GngKfb/dv29SXAu4Dt271sB2xLbNXbNsxbXl+A+6s1\n/1pFpFM9yU4Fd62ZGRGinY2OW8J5I+BZOg7ltuH8Er35TzMbQOyh3hLkbYN9G2Kk3n6U3hLqr1X9\nuCLSIwruWjNbm65Hx0OIUfSrdD9Kfhb3d/r5K1iZ2UBaQ719sG8NLKXj6ZcFuL9eQMUiDUfBXQWz\nkeMHMeSkLRm4/jCW2qHMv+OL/GMJHY+S16Dz0XHrv40wUo1QH8qqUy8tob6EjqdfnsD9jZ4/zMjx\nMPQkWG9NePl1WHyO9lqRZqLgroTZoB/xrlM3YaPTxrJs/XcYyFMM4QWeeWUIz901gjfuY9VQfrFX\n0xaNwmwQsCUdT79sCTxDx9MvT+D+ZuvdjBwPoyfDpdu13vnE+XDf1xTe0iwU3N2JwBkDfBY4ZA7r\nrH4l2QY38i8sZJs2Nxw/zf32cYXUWHbxPd6KjqdfhhJPgvOBed9j233v5Zz3Pc4OLGAY0PLjo++/\nNI+eZGfztQNGkOxNhPWngf8FfgHsNoLxV8K39l71k9Zdqz9LbCjubwML8pdpK30sOmn+Gepb8fYn\nR3Ee72cmL7AxU5jANRzB3/X9F1lJcwT3ymF9CLAIuAHYHfcnWm83rpMFtuXln6OuR+5v0dJbDlOP\nsnHjYeoQYwV7cg8TmMIsRjKPFSMwOwK4WT3oIo185aTZIMz2xexCYj76LOAJYDTuH8b97JVCG9AJ\nMkWL778zgLv5KBO5jKF84on5cDlwBPAkZlditk/e1ijSlBprjjs6H9pOgywmRtY3rBrSnd3FyPGw\n5YkxPbL8NZ0g07+6/P6bDQYOByYAGwNXA1Nwf7y4ikX6VnMsTkZYf5QI688ATxJz1jfivqDmjy/F\nMNsZOIoYiS8CpgDX4/58oXWJ9FLjBvfKYf1pYiqkZWStsG4msX6xPzEK/zjweyLEb2vbaihSFo0V\n3BHWewGHEmH9NK0j6/ldfao0CbMNiL+6JgAjgZ8TIX6/+u2lLMof3K1h3TIN8jStI2uFtXTObGvg\nSCLEVxAB/jPcFxVYlUi3yhncEdZ70jqyfoYYWSuspXKxydduRIAfCswkQvyXuL9cZGkiHSlPcLeG\ndcvI+hlaR9bzalKgNB+zNYCDiBDfG7iVCPE7C9/gSyRX38EdYb0HMQr6DLFJUcvIWmEttWX2buDz\nRIhvDlxDtBbOKrQuaXr1F9ytYf1Z4F+IsG4ZWf+tJoWIdMdsR6K18Ehi69opwHW4Lym0LmlK9RHc\ncYVb25H1UlpH1gprqR8xsBhDjMI/CdxDhPivtd+49JfigxvOJUbWS2kdWesqN6l/ZusS+9pMAHYB\nbiRC/E9qLZRa6nVwm9kVxEUNz7r7Tvn7Nib6Y7cCFgKHuvs/Onxw+P8orKXszLYgrtA8mjg842rg\nal3sJbXQF8G9F7AcmNImuM8GnnP3s83sNGAjdz+9mgcXKZVoLRxFjMIPA/5GjMJ/QQeDF5Fq9MlU\nicWFDLe0Ce7HgL3dfYnFpj/T3f19HT04jP2Njp6ShhR7iY8lQvwA4DcXstGcr/Phj7zJBmvo2DWp\nVk+Cu5qtMTfz1tX2JcBmnd906sdg9OTY8U2kgbi/hfstuH8W2OYW1n32Qww8fREzDvwhW+69KT/V\nz77UTK/2NPYYrnezUHPpdrFNp0iDcn/xYPbcfleWrrkn9zCIt5nDjiTes90mDP5G0eVJ46kmuFum\nSDCz9wDPdn7TSfnLvOFmNqaKxxIpifXWBJjP9nyDn7ALD7Ili3icP+6N2cmYrVl0hVKfzGyMmU1q\neenR51Qxx3028Ly7n2VmpwMbdrY42ToY12Gv0tjMxk2LqcGVjWb0Pffy5xeADxCjmCm6vF660us5\nbjO7DrgX2MHMFpvZMcAPgAPM7G/AvvnbXdDRX9IMOj727j5ePhP3TxJdKMcAMzH7VN6hIlKVml6A\nA+Om6egvaRbdHnsXYT0OOBN4FTgd97sKKlfqVPFXTqqPW2RVsQ3EYcB/AI8DZ+A+o9iipF7Uqh1Q\nRHrDfQXu1wDvA24DpmJ2LWbDCq5MSkLBLVIU9zdxPw/YHpgL/AWz8/PT7EU6peAWKZr7ctz/gxiB\nvwHMxuy7+RmaIqtQcIvUC/fncD8Z+CAwBJiH2SnqAZf2FNwi9cZ9Ee7HAPsQh2X/DbNjMRtUcGVS\nJ9RVIlLvzEYT10u8G/h34GbtCd641A4o0iiiB3ws0QP+OtEDPr3QmqQmFNwijSZ6wD9P9IDPI3rA\nHy62KOlL6uMWaTTRA34tMBy4Bbgds+sw267gyqQfKbhFyih6wM8nesBnA3/G7AJix05pcApukTKL\nHvDvEj3grwGzMPseZhsWXJnUkIJbpBFED/gpRA/4YKKF8JuYrVVwZVIDCm6RRhI94McBY4CPEAF+\nnHrAG4u6SkQamdnuRA/4YKIH/Cb1gNc3tQOKSEsP+MeIHvC3iB7w3xdblHRGwS0iraIH/HNED/gC\nogf8oWKLkvbUxy0iraIH/DpgR+Bm4FbMrsds+4IrkwopuEWaTfSAX0j0gM8E7sPsIsw2L7gy6SEF\nt0izcn8F9+8DOwAvA49idqZ6wOufgluk2bk/j/u3gA8QOxA+htnROom+fmlxUkRWZvYh4GLgJeAr\nuD9WcEVNRYuTIlI59weA3YgFzHsw+45O4akvCm4RWZX727hPJqZPRhDz3/sXXJXkNFUiIt0zOwg4\nD7gHOAX3JQVX1LA0VSIifcP9VmLk/TQx+v5SfkGPFEAjbhGpjNn7icVLB47H/dGCK2ooGnGLSN9z\nnwnsAVwF/B6zszFbp+CqmoqCW0QqF5fPXwyMBIYAs/N5cOkHVU+VmNkZwJHACuBR4Bh3f6PNxzVV\nItIszA4ALgAeAb6G+1MFV1RaNZsqMbOtgYnAKHffCRhInDwtIiVlNnK82bhpZodOj39Hju/xJ7vf\nAewEzAFmYHYSZgNrVWuzq/ZUjJeIfX3XNrN3gLUBPcOKlFSE9OjJcGmb0+InDjMbifus23t0J+6v\nA9/G7FrgImACZsfj/mAtam5mVY243f0F4L+ARUR70D/c/Xd9WZiI9KehJ60c2hBvb3lixXcVl8jv\nA5wL3IbZZMzW74sqJVQ14jazYcDXga2BZcANZnaEu1/T7naT2rw53d2nV1emiNTWep1c0r5udYcN\nx+LZVZjdCpxNLF5+HR2dtgozG0OcEdpj1U6VfAi4192fzx/4JuJg0pWC290nVXn/ItKvXn694/cv\nf61XdxsZcRxmHyWmT47F7ATcF/bqfhtIPqCd3vK2mWXdfU617YCPAbub2VoWWz/uTyxKiEgpLT4H\nJs5f+X1fXACLzu2Tu3f/I7HvyZ+ABzA7FbPV+uS+m1Bv2gFPBY4m2gEfAr7o7m+1+bjaAUVKJBYo\ntzwxpkeWvwaLzu3xwmRlDzQMOB/YHPgy7vf2+WOUmA4LFpH6FH+pHwr8CLiVOHn+xWKLqg+65F1E\n6pO74/5zYuOqt4E5mB2hU3d6RiNuESme2W7ExlVLga/iPq/gigqjEbeIlIP7X4hutanEqfPfxmyN\ngquqWwpuEakPcerOj4BR+csjmO1TcFV1SVMlIlKfzD4FnAP8Afgm7ksLrqhfaKpERMrL/WZi8fJ5\nYBZmx+nUnaARt4jUP7MPEldevkn0fs8uuKKa0YhbRBqD+8PEthrXAdMx+z5maxdcVWEU3CJSDu7v\n4H4B8H5gW+LQ4rEFV1UITZWISDlFaJ8PPAB8Hfe/F1xRn9BUiYg0LvdpxKk7C4CZmJ3QLKfuaMQt\nIuVnNuJZBv78Odbc4nh2nX8PazwHi8+pySZZNdaT7Kx2P24RkbphjNhqALuv8QVGb3Aj/7bLFCbw\nHTbbrqKj10pEUyUi0gCGnrSCy7a7guPYiUfZnKeZyV3DDmdQKrqyWlBwi0gDaD16bSmbciTX8GUu\n4mweH4nZtZhtVmR1fU3BLSINYNWj137LxxjOXn8EFhOtg8c1yraxCm4RaQAdH732Mk9Pxv004EDg\neOLinfcVUGCfUleJiDSEbo9ei1bBE4BvE5tXnYX7GwWV2ykdXSYi0p7ZUOA84L3Al3C/u+CKVqLg\nFhHpSMx1H0KMvG8HTquXMy915aSISEfizMubiG1j3wJmY/a5sixeasQtImI2GriE6ED5Ku4LiytF\nI24Rke653wfsAtwNPIDZyZjV7ZXlGnGLiLRlth1xaMNGxOLlg/378Bpxi4hUxn0+cAAwGbgdsx9h\ntm7BVa1EwS0i0l4sXk4hFi/fRSxefrzgqv5JUyUiIt0x25+YPnkQ+Bruz9TuoTRVIiLSe+6/Iw5t\nmE8c2vClIk+cr3rEbWYbApcRf0o4cKy7/7nNxzXiFpHGY7YT0Tr4DrF4Oadv7762I+7JwO3uPpw4\nvHNuL+5LRKQc3B8F9gCuBe7C7DuYrdnNZ3XLbOR4s3HTenTbakbcZrYB8LC7b9vFbTTiFpHGZjaE\nuGx+JHA87tOru5uR42H0ZLh0OzBqNeLeBlhqZlea2UNmdqmZrV3lfYmIlJP7U7h/BjgVmILZ5Zht\nXPkdDT0pQrtnqg3uQcAo4AJ3HwW8Apze/kZmNqnNy5gqH0tEpL65/zex3recaB08vKf7nkQ2zn8f\nTCJeevA5VU6VDAbuc/dt8rf3BE5394Pa3EZTJSLSfMx2JRYvlwBfwf2J7j9l3DSY+rH8rdpMlXj0\nMC42s/fm79ofmF3NfYmINBT3+4EPA3cC92N2Kmardf1JHZ3g07netAPuTLQDrg4sAI5x92VtPq4R\nt4g0N7NtgQuBzYCJuP+185u2nOAzdawOUhARKVLMdR8O/CfwC+D/4f5yFzfXlZMiIoWKfU+uIVoG\n1yUWLw/uzV1qxC0i0p+iw+5iYBZwEu5PrfxhjbhFROpLXKSzM9HQMQOzr1a674lG3CIiRTHbkWgd\nHEDsezKrJ9lZt0fziIg0PPc5mH0UmAj8AbNLevJpmioRESmS+wrcLyY26+vRZe+aKhERqSNanBQR\naUAKbhGRklFwi4iUjIJbRKRkFNwiIiWj4BYRKRkFt4hIySi4RURKRsEtIlIyCm4RkZJRcIuIlIyC\nW0SkZBTcIiIlo/24RXoppWTA5sCOwIj89fnE0VSzsyxbVmB50oC0ratID+UB/R4inFtCuuX1t4ij\nqGYDTxP7Ko/MP/YiEeKz8o/PAuZmWfZKP38JUgI9yU4Ft0g7eUAPZtWAHgG8TWtAt7zMybJsaSf3\nNQDYigjxkfl9jAR2IAK+faA/nmXZG7X62qT+KbhFupAH9GZ0HNAraBfOxLTHs3302IOAYawa6NsA\nC1k10OdnWfZ2Xzy21DcFtwj/DOhN6TigoV045y/PZllWm1+OrmtdgxiNtwR5S6hvDsyjNdBbQn1h\nlmUr+rtOqR0FtzSdlNKmrBrOI4gOqvbhPBtYUkRAVyqltA4wnFUDfWNav6a2gf5UGb4uWZWCWxpW\nSmkTVg3nEcBqrDoHPRt4phGDLKW0Aa1fe9tAX5OVp1paOlz6ZKpHakfBLaWXUnoXHQf0GnQc0H9v\nxICuVErp3awa6COJ7peOAv0fBZUq7dQ8uM1sIPAA8KS7f6LSBxdpL6W0E/AF4INE6KxFB10caCqg\nYm3aGdsuhra0LC6jNdDvBW7JsuzNgkptav0R3CcDuwDrufvBlT64CEBKaXXgEOAEotPiciI8ZgNP\nKqBrK29Z3JLWQB9LLJBeClySZdlTBZbXdGoa3Ga2BfBT4HvAyRpxS6VSSlsAXwImAo8B5wP/nWXZ\nW4UWJqSUdgS+ChwO3En839ylJ9Haq3Vw3wB8H1gf+KaCW3oi/3N9H2J0vQ9wLXBBlmVzCi1MOpRS\nWh84ivj/WgFcAFydZdnLhRbWwGoW3GZ2EDDO3U8wszHAKR0FN5DavGu6u0+v+MGkIeTdDxOIUdw7\nxAjuZwqAcsifcMcQAb4v8YR7fpZlc4usqxHkGTqmzbuyWgX394ln4beJtqP1gV+6+4Q2t9GIW1oW\nG78KfA64gxix/VF/cpdXuymuubROcenKzj7QL+2AZrY3miqRNvLFxk8TgT0MuAS4NMuypwstTPpU\nm//nE4CtgYuJ/+clRdZVdv0Z3Keoq0Q6GIldgBYbm0JKaWfiifpQYCoxCr9Xf1lVThfgSM1psVHa\nSiltCBxNhPhrRIBfqy1se07BLTWjxUbpSt4bvh/xhL4ncDXxhD6v0MJKQMEtfS5fbDyBWGz8LRHY\nd+tPYulMSmkr4MvAscAM4mfmtizL3im0sDql4JY+0cFi48XAZVpslEqklNYEPks88Q8GLgIu7+wQ\nimal4JZeyRcbjwe+iBYbpQ+llHYhAvwQ4BZiFH6//nJTcEsV8sXGfYnRtRYbpaby3R+PAb5CnM15\nPnB9lmWvFVpYgRTc0mNabJQi5YuZY4F/BT5M7IN0YZZlTxRZVxEU3NItLTZKvUkpDSMWM78A3E/8\nTE5rliPaFNzSoXZXvG1L6xVvfy+0MJE2UkprAZ8nRuEbAhcCV2RZ9kKhhdWYgltW0sFi4/nAr7XY\nKPUsX3fZjRhoHATcRGxw9VChhdWIgls6Wmy8hpg71GKjlE5+GPRxxFTK08Tg44Ysy94otLA+pOBu\nYlpslEaWUhpIjL5PAHYmTk26KMuyRYUW1gcU3E0oX9g5BTgMLTZKE0gp7UC0Ex4F3A1MBqaX9Wde\nwd1E8t3ZTgMOJBYbz9NiozSTlNI6wJHAN4jDj88k1nBK1Y2i4G4CKaU9gTOIU9F/Qvy5+FKxVYkU\nJ59G+RTxe7E2cBaxQ2EpFuEV3A0qX3AcR/xgbg6cDVyVZdnrhRYmUkfy35P9iN+T7YD/JPZGebXQ\nwrqh4G4wKaVBxCY9p+fvOhO4UUdGiXQtpbQr8XuzB3Au0U74YrFVdUzB3SDyXdW+AHyLaIE6E5ha\n1sUXkaKklIYDpwIHA1cAP663XS4V3CWXUlqf6Ff9OvAQ8IMsy+4ptiqR8kspbUl0Xx0F3AicnWXZ\n/GKrCgruksovMjiJCO3fEoE9s9iqRBpPSmkT4nftK8CdxO/ajCJrUnCXTH5SyDeBI4BfAD/MsmxB\nsVWJNL6U0nrEQdcnAzOJ6chCrn9QcJdESmkE0YP9ceAy4CfqwRbpfymlNYgrjk8FlhIBflt/9oIr\nuOtcSmk3olVpd+Ac4sCCfxRblYjkveCfITpRViN6wa/vjw4uBXcdyntLDyB+IIYBPyS2qqzr3lKR\nZpT/vh5IDLC2In5fr6zlCT0K7jqSP4MfQgT2WsQz+HVluZpLpNmllEYTv7+7EfuhXJBl2bK+fhwF\ndx3IDy04ipgze5GYM7ulbPsniEhIKY0kfp8/DlxKrEk901f3r+AuUEppXWAisUo9lwjs0u5YJiIr\nSyltTWsX2PVEF1ivz8hUcBcgP7X6RGKf4OlEX+iDhRYlIjWTUtqM6AU/HvgNcFZvrrtQcPej/Fiw\nk4lL028inn0fL7QoEek3+eElx9N6pfOZWZb9qdL7qVlwm9lQYAqwKeDAJe5+TqUP3ghSSu8lerAP\nAX4K/CjLsicLLUpECtPbvYVqGdyDgcHuPsPM1gUeBD7l7nMrefAySyntQqwwjyFOmTk3y7LnCy1K\nROpGB7t5/oA4H7PLXvB+myoxs5uBc939zkoevGzyns4xRE/njsB/AZdmWba8yLpEpH51sH/+D4Gf\ndrZ/fr8Et5ltDdwFjHD35W3e3zDBnVIaAHyC+MZvTPRg/6yRTpYWkdrLT6w6HRhFJydW1Ty482mS\n6cB33f3mSh+83qWUViMO3T0NeJ2Yq/pVlmXvFFqYiJRaSun9RK58jDgjdnKWZc9CjYPbzFYDbgWm\nuvtPOvi4A6nNu6a7+/SqHqyfpZTWBo4lejSfIOam7lAPtoj0pZTSto888siPn3vuuQOXLVs2c+HC\nhfe99NJLX6vV4qQBVwHPu/s3OrlNqUbc+TzUHsDRxOYyfyR6sP9caGEi0vBSSoOJNsKJkyZN2rhW\nwb0nEWwziXZAgDPcfVqb25QiuFNK2xKXpE8A3iCekK5RS5+I9LeU0oaTJk16URfgdCBvlP8sEdbD\nictVrwIe1HSIiBRJV062kfdU7k9MhYwnjimaAtyeZdmbRdYmItJCwQ2klHYiRtZHAE8SI+ufZ1n2\nXKGFiYh0oCfZOai/iulP+WG7hxOBvSlwNbBflmVzu/xEEZESaJgRd74/wEHEVMhewK+JqZA/qO9a\nRMqi4UfceQvf7sTI+lDgEWIq5PAsy14usjYRkVopZXCnlLaitYXPiZH1qCzL/rfQwkRE+kFpgjul\ntB5xYczRwE7AL4jwvl8tfCLSTOo6uPMDdvclRtafIDazOg+4VRs8iUizqsvFyZTScGJkfSSwhJi3\nvr5lExYRkUZVqsXJlNImwOeJwB4C/AwYm2XZrEILExGpM4WOuFNKqxNH3B8N7EPsNjgF+J1a+ESk\nGdXliDtv4fswMW/9OWAOMRUyof2G4iIisqp+C+6U0lBiznoCsBoxst41y7L/6a8aREQaQU2DO6W0\nDvBpYipkFHADcBxwn1r4RESqU+sR95PAn4BLgF93djimiIj0XK2De3iWZc/U+DFERJpKXfZxi4g0\nq55k54D+KkZERPqGgltEpGQU3CIiJaPgFhEpGQW3iEjJKLhFREpGwS0iUjIKbhGRklFwi4iUjIJb\nRKRkFNwiIiVTdXCb2Vgze8zM5pnZaX1ZlIiIdK6q4DazgcRp62OBHYHDzGx4XxZWNDMbU3QNvaH6\ni1Pm2kH1l0G1I+5dgfnuvtDd3wKuBz7Zd2XVhTFFF9BLY4ouoJfGFF1AL4wpuoBeGlN0Ab00pugC\naq3a4B4CLG7z9pP5+0REpMaqDW4dOyYiUpCqDlIws92BSe4+Nn/7DGCFu5/V5jYKdxGRKnR3kEK1\nwT0IeBzYD3gauB84zN3nVlOkiIj0XFVnTrr722b2r8BvgIHA5QptEZH+UbMzJ0VEpDZqcuVkmS/O\nMbMrzGyJmT1adC2VMrOhZvYHM5ttZrPM7KSia6qEma1pZn8xsxlmNsfMziy6pmqY2UAze9jMbim6\nlkqZ2UIzm5nXf3/R9VTKzDY0sxvNbG7+M7R70TX1lJntkH/fW16WdfY73Ocj7vzinMeB/YGngL9S\novlvM9sLWA5Mcfediq6nEmY2GBjs7jPMbF3gQeBTZfneA5jZ2u7+ar6Ocg/wTXe/p+i6KmFmJwO7\nAOu5+8FF11MJM/sfYBd3f6HoWqphZlcBd7n7FfnP0DruvqzouiplZgOI/NzV3Re3/3gtRtylvjjH\n3e8GXiy6jmq4+zPuPiN/fTkwF9i82Koq4+6v5q+uTqyflCpAzGwLYDxwGdBlZ0AdK2XdZrYBsJe7\nXwGxFlfG0M7tDyzoKLShNsGti3PqgJltDXwQ+EuxlVTGzAaY2QxgCfAHd59TdE0V+jHwLWBF0YVU\nyYHfmdkDZjax6GIqtA2w1MyuNLOHzOxSM1u76KKq9Hng2s4+WIvg1mpnwfJpkhuBr+Uj79Jw9xXu\n/gFgC+CjZdp3wswOAp5194cp6agV2MPdPwiMA07Ipw7LYhAwCrjA3UcBrwCnF1tS5cxsdeATwA2d\n3aYWwf0UMLTN20OJUbf0AzNbDfgl8DN3v7noeqqV/4l7G/ChomupwEeAg/N54uuAfc1sSsE1VcTd\n/57/uxT4FTH1WRZPAk+6+1/zt28kgrxsxgEP5v8HHapFcD8AbG9mW+fPHJ8Dfl2Dx5F2zMyAy4E5\n7v6TouuplJltYmYb5q+vBRwAPFxsVT3n7v/m7kPdfRviT93fu/uEouvqKTNb28zWy19fBzgQKE13\nlbs/Ayw2s/fm79ofmF1gSdU6jHji71RVF+B0pewX55jZdcDewLvMbDHwbXe/suCyemoP4Ehgppm1\nBN4Z7j6twJoq8R7gqnxFfQBwtbvfWXBNvVG2acPNgF/F8z+DgGvc/bfFllSxE4Fr8kHjAuCYguup\nSP6EuT/Q5fqCLsARESkZHV0mIlIyCm4RkZJRcIuIlIyCW0SkZBTcIiIlo+AWESkZBbeISMkouEVE\nSub/AFxZ+h0/q6B1AAAAAElFTkSuQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0xab352f2c>"
]
}
],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fitter.current_result.values"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 3,
"text": [
"{'amplitude': 26.028242096009546,\n",
" 'center': 3.9949292344958436,\n",
" 'fwhm': 5.2960364040704793,\n",
" 'sigma': 2.2490196295557534}"
]
}
],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Reuse the Fitter on Different Data\n",
"\n",
"Unlike `Model`, `Fitter` is \"stateful;\" it remembers that it has been called, and it uses each best fit as the initial guess for the next fit (unless a new guess is provided).\n",
"\n",
"Execute the cell below and revisit to the fitter above. (Or create a new view below; multiple views of the same instance of `fitter` all stay in sync.) Clicking \"Fit\" will use the most recent best fit to `data` as the initial guesss for fitting `other_data`."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"other_data = np.array([10, 11, 12, 11, 10, 8, 7, 6])\n",
"fitter.data = other_data"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Select a User-Defined Model\n",
"\n",
"Any subclass of `Model` will be included in the drop-down menu. Look for 'UserDefinedModel' in the menu below."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def func(x, a=1):\n",
" \"a very simple model indeed\"\n",
" return x + a\n",
"\n",
"class UserDefinedModel(lmfit.Model):\n",
" def __init__(self, *args, **kwargs):\n",
" super(UserDefinedModel, self).__init__(func, *args, **kwargs)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"data = np.array([1,2,3,4,5,4,3,2])\n",
"x = np.arange(len(data))\n",
"\n",
"fitter = lmfit.Fitter(data, x=x)\n",
"\n",
"fitter"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 7,
"text": [
"<lmfit.ui.ipy_fitter.NotebookFitter at 0xab59abac>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0xab45608c>"
]
}
],
"prompt_number": 7
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"See the docstring for more, including complete access to the plot elements."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"!jist \"Interactive Curve-Fitting in the IPython Notebook\""
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Error: No such file or directory - /home/dallan/Downloads/Interactive Curve-Fitting in the IPython Notebook\r\n"
]
}
],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment