{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Monte Carlo (MC) Methods" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this notebook, we will become familiar with the basic notion of Mote-Carlo methods:\n", "\n", "1. Sampling probability distributions\n", "2. MC estimate for $\\pi$\n", "3. Metropolis Hastings algorithm for the Ising model on a square lattice" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sampling Custom Probability Distributions\n", "\n", "Our first goal is to learn how to sample probability distributions using numpy. \n", "\n", "First, we define a Gaussian mixture in $1d$, and we visualize it. " ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "import numpy as np # load numpy library\n", "import matplotlib.pyplot as plt # load plot library\n", "\n", "# set the seed of the random number generator (required for reproducibility)\n", "seed=0\n", "np.random.seed(seed)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "### define a Gaussian mixture in 1d\n", "\n", "# mean and standard deviation\n", "mu_1, sigma_1 = -2.0, 0.5 # Gaussian 1\n", "mu_2, sigma_2 = +5.0, 1.2 # Gaussian 2\n", "\n", "# mixture paramters (sum up to unity!)\n", "alpha_1 = 0.2 \n", "alpha_2 = 1.0 - alpha_1\n", "\n", "# define mixture\n", "my_distr = lambda x: alpha_1/np.sqrt(2*np.pi*sigma_1**2) * np.exp(-(x-mu_1)**2/(2*sigma_1**2)) \\\n", " + alpha_2/np.sqrt(2*np.pi*sigma_2**2) * np.exp(-(x-mu_2)**2/(2*sigma_2**2))\n", "\n", "\n", "# visualize distribution\n", "x=np.linspace(-6,10,100)\n", "y=my_distr(x)\n", "\n", "plt.plot(x,y)\n", "plt.xlabel('x')\n", "plt.ylabel('Gaussian mixture prob.')\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to sample from this distribution, we first need to discretize it (numerical programs work (mostly) with numbers, not expressions). To this end, we sample $100$ points uniformly at random, and evaluate the distribution on these points." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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733ve4wZM4bhw4cza9as6BQYZ555Jtdffz0TJ07klFNOYd26dcyYMYMTTzwxOvHh9u3bOfnkk7nyyispKyvjoosuijsb68qVKxk/fjyjR4/m4osvjo4YF2mv4gQlgfZOyVMxqoRFF41oMuB20UUj1KMqB2jkeKylS2HWLHjrLXAPfZ81q0PJ4y9/+Qv9+/dn48aNbNmyhalTp3Ldddexbt06tmzZQn19PX/+85+jxx9xxBGsXr2a2bNnc8EFF7B48WK2bNnCkiVLeO+9UBPQtm3bmDVrFps2baJ3794tFmx69913+cEPfsATTzzBhg0bKC8v5yc/+Um7/waRyuo6Dnx4qMX2wgLr0PQiFaNKWDP3LN5cOI01c89S0sgRShyxbroJmt+9HzwY2t5OpaWlPPHEE9x44408/fTT9OnThyeffJKxY8dSWlrKqlWrmkwlEpk9t7S0lGHDhtGvXz+OPPJIPv3pT7NzZ6h388CBA6OL91x++eU888wzTX7n888/z4svvsiECRMYOXIk9913H2+99Va7/waRRY9ti7s401FHdNeHfRek2XFj7Wg5fUKr25Nw0kknsX79eh599FHmzZvH5MmTWbx4MVVVVQwcOJD58+dH14IAmsy+2nxm1shsrM1nS23+2N0555xzWLZsWbvjFomVqB1jn7rOdkkqccRqtoZFm9uTsGvXLnr27Mnll1/ODTfcwIYNGwA47rjjOHDgQHQFwFTs2LGD5557DoBly5bxuc99rsn+cePGsWbNGl577TUADh48GHddDZFkJWrH0Cp+XZMSR6wFCyC84FJUz56h7e20efNmTj/9dEaOHMmCBQu4+eabufrqqyktLaWiooIxY8akfM1TTjmF++67j7KyMvbs2cM111zTZH/fvn1ZsmQJl112GWVlZYwbNy66FKlIewSx5IDkrkBnx+1saZkdd+nSUJvGjh2hksaCBTBzZpojbb/t27dz3nnnsWWLhrVIfEHNjqsJCfNTVs2Om7NmzsyqRCGSLbSKn0QoceSYwYMHq7QhnUolDWmuSyQOd09qLW2RXJfuqufI/FSRqUYi81OBpj7vyvK+cbxHjx689957aX9DiWQbd+e9996jR48eabtmuuenkvyQ9yWOAQMGUFtbi9bqkK6gR48eDBiQvvXQ0j0/leSHvE8chYWFDBkyJNNhiOSk/sVF1MVJEhq/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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# sample M random numbers uniformly from the interval $[-6.0,+10.0]$\n", "M=100\n", "x_random=np.random.uniform(-6.0,10.0,M)\n", "\n", "# evaluate distribution at these random points\n", "y_random=my_distr(x_random)\n", "\n", "# define discrete distribution as an array (keep in mind the normalization!)\n", "my_distr_approx=y_random/np.sum(y_random)\n", "\n", "# create a sample fro the Gaussian mixture (REQUIRES distribution to be normalized!)\n", "N=1000 # sample size\n", "x_sample=np.random.choice(x_random,p=my_distr_approx,size=N)\n", "\n", "\n", "# plot result\n", "plt.clf() # clear figure\n", "plt.scatter(x_random,y_random,label='discrete distr. (not normalized)') # plot the random points\n", "plt.scatter(x_sample,0*x_sample,color='r',label='sample') # plot the sample only\n", "plt.xlim(-6.0,10.0) # fix plot limits\n", "plt.legend()\n", "plt.xlabel('x')\n", "plt.ylabel('distr.')\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To recover empirically the original distribution from the sample, we can build a histogram:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, (ax1,ax2) = plt.subplots(1,2,figsize=(10,4)) # 1 row, 2 columns\n", "\n", "hist_object_1 = ax1.hist(x_sample,bins=20,color='red')\n", "ax1.set_xlim(-6.0,10.0)\n", "ax1.set_xlabel('x')\n", "ax1.set_ylabel('distr. (not normalized)')\n", "\n", "hist_object_2 = ax2.hist(x_sample,bins=20,color='blue',density=True)\n", "ax2.set_xlim(-6.0,10.0)\n", "ax2.set_xlabel('x')\n", "ax2.set_ylabel('distr. (normalized)')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Monte Carlo Estimate of $\\pi$\n", "\n", "Consider a square of side $d$, and inscribe a circle of radius $r=d/2$ in it. The ratio of the area of the circle to the area of the square is\n", "\n", "$$ \\frac{A_\\mathrm{circle}}{A_\\mathrm{square}} = \\frac{\\pi}{4}$$\n", "\n", "which is propoertional to $\\pi$. Therefore, if we can use MC sampling to estimate the area of the circle and the square separately, we can get an approximation to the numerical value of $\\pi$. \n", "\n", "\n", "Below, we generate random points $(x,y)$ from the interval $[-1,1]\\times[-1,1]$ which defines the square. For each point $(x,y)$ from the square, we can compute the square distance to the origin $(0,0)$: \n", "\n", "$$D^2=x^2+y^2$$\n", "\n", "If $D^2<1$, then $(x,y)$ lies within the circle, otherwise it does not. \n", "\n", "An estimate of the ratio of areas can then be obtained by counting the number of randomly chosen points which belong to the circle, and dividing this by the total number of points, restricted to the square. \n", "\n", "The procedure can be summarized in the following steps:\n", "1. set a fixed number of Monte Carlo points to run the simulation for\n", "2. initialize counters for the number of points in the circle and the square, and set them to zero\n", " 1. draw a random point $(x,y)$ inside the square (propose a state)\n", " 2. compute the squared distance $D^2=x^2+y^2$\n", " 3. if $D<1$, increment the circle counter (reacall: accept/reject proposed state)\n", " 4. increment the square counter\n", "3. repeat steps 2A-2D until the number of MC points has been reached\n", "4. estimate the value of $\\pi$ from the ratio of the counters. " ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pi estimate is 3.12520 with absolute error 0.016393.\n" ] } ], "source": [ "def MC_pi(N_MC_points=10000):\n", " \"\"\"\n", " N_MC_points: int\n", " number of MC points to estimate the value of $\\pi$\n", " \"\"\"\n", " # initialize counters\n", " N_circle_points=0\n", " N_square_points=0\n", "\n", " j=0 # set auxiliary counter (can be avoided by using a for-loop)\n", " while j" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# loop over different order of magnitudes of MC points\n", "N_MCs=np.logspace(2,6,5)\n", "\n", "# preallocate data array\n", "pi_approx=np.zeros(N_MCs.shape, dtype=np.float64)\n", "# find $\\pi$-estimates\n", "for i,N_MC_points in enumerate(N_MCs):\n", " pi_approx[i]=MC_pi(N_MC_points)\n", " \n", " \n", "# plot results\n", "plt.plot(N_MCs, pi_approx, '-ob', label='MC est.')\n", "plt.plot(N_MCs, np.pi*np.ones(N_MCs.shape), '--k', label='exact')\n", "plt.xscale('log') # plot x-axis on a log scale\n", "plt.xlabel('$N_\\mathrm{MC}$')\n", "plt.xlabel('$\\pi$ estimate')\n", "plt.legend()\n", "plt.grid()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Metropolis Hastings Algorithm for the 2D Ising Model\n", "\n", "The energy function of the classical Ising model is given by\n", "\n", "$$ H(S) = J\\sum_{\\langle ij\\rangle} S_i S_j,\\qquad S_i\\in\\{\\pm 1\\} $$\n", "\n", "where the lattice site indices $i,j$ run over all nearest neighbors of a square lattice of $L\\times L$ lattice sites, and $J$ is some arbitrary interaction energy scale. We adopt periodic boundary conditions. \n", "\n", "Onsager proved that this model undergoes a thermal phase transition in the thermodynamic limit ($L\\to\\infty$) from an ordered ferromagnet with all spins aligned, to a disordered phase at the critical temperature $T_c/J=2/\\log(1+\\sqrt{2})\\approx 2.26$. \n", "\n", "For any finite system size ($L<\\infty$), this critical point is expanded to a critical region around $T_c$." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "import scipy.sparse as sp\n", "\n", "# model parameters\n", "L=40 # linear system size\n", "J=-1.0 # Ising coupling\n", "\n", "N_sites=L*L # total number of lattice sites\n", "sites = np.arange(N_sites,dtype=np.int32) # sites [0,1,2,....]\n", "\n", "x = sites%L # x positions for sites\n", "y = sites//L # y positions for sites\n", "\n", "T_x = (x+1)%L + L*y # translation along x-direction\n", "T_y = x+L*((y+1)%L) # translation along y-direction\n", "\n", "# build 2D Ising model with nn interactions\n", "h_2D_nn = np.array( [ [J,i,T_x[i]] for i in range(N_sites)] + [ [J,i,T_y[i]] for i in range(N_sites)] )\n", "H=sp.csr_matrix((h_2D_nn[:,0], (h_2D_nn[:,1], h_2D_nn[:,2])), shape=(N_sites, N_sites))\n", "\n", "def energy(s):\n", " return np.dot(s,H.dot(s))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's visualize a random spin configuration:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "S=2*np.random.randint(0,2,size=N_sites)-1\n", "S=S.reshape(L,L)\n", "\n", "plt.imshow(S,vmin=-1., vmax=1., cmap='plasma_r')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we want to sample configurations from the Boltzmann distribution\n", "$$p(S)\\propto \\exp(-H(S)/T)$$\n", "at a temperature $T=\\beta^{-1}$. Note that we cannot normalize this distribution because there are a total of $2^{L^2}$ configurations, which is about $10^{480}$ (!!!) for $L=40$.\n", "\n", "To do this, we will implement a version of the Metropolis-Hastings algorithm discussed in class. " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# simulation parameters\n", "N_MC_points=100\n", "corr_time=N_sites\n", "thermalization_time=10*N_sites\n", "\n", "# preallocate data\n", "states=np.zeros((N_MC_points,N_sites),dtype=int)\n", "energies=np.zeros((N_MC_points,),dtype=np.float64)\n", "\n", "def sample(T):\n", " \"\"\"\n", " This function generates a sample of spin configurations at a fixed temperature T.\n", " \n", " \"\"\"\n", " \n", " \n", " # define initial state\n", " s=2*np.random.randint(0,2,size=N_sites)-1\n", " # compute energy\n", " E_s=energy(s)\n", " \n", " # compute inverse temperature\n", " beta=1.0/T\n", "\n", " j,k=0,0 # auxiliary counters\n", " while kthermalization_time:\n", " states[k]=s\n", " energies[k]=E_s\n", " k+=1\n", "\n", " j+=1\n", " \n", " return states, energies" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "T = 2.0 # choose temperature: recall: p(S) ~ exp(-H(S)/T)\n", "states, energies = sample(T)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "/* global mpl */\n", "window.mpl = {};\n", "\n", "mpl.get_websocket_type = function () {\n", " if (typeof WebSocket !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof MozWebSocket !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert(\n", " 'Your browser does not have WebSocket support. ' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.'\n", " );\n", " }\n", "};\n", "\n", "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = this.ws.binaryType !== undefined;\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById('mpl-warnings');\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent =\n", " 'This browser does not support binary websocket messages. ' +\n", " 'Performance may be slow.';\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = document.createElement('div');\n", " this.root.setAttribute('style', 'display: inline-block');\n", " this._root_extra_style(this.root);\n", "\n", " parent_element.appendChild(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message('supports_binary', { value: fig.supports_binary });\n", " fig.send_message('send_image_mode', {});\n", " if (mpl.ratio !== 1) {\n", " fig.send_message('set_dpi_ratio', { dpi_ratio: mpl.ratio });\n", " }\n", " fig.send_message('refresh', {});\n", " };\n", "\n", " this.imageObj.onload = function () {\n", " if (fig.image_mode === 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function () {\n", " fig.ws.close();\n", " };\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "};\n", "\n", "mpl.figure.prototype._init_header = function () {\n", " var titlebar = document.createElement('div');\n", " titlebar.classList =\n", " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", " var titletext = document.createElement('div');\n", " titletext.classList = 'ui-dialog-title';\n", " titletext.setAttribute(\n", " 'style',\n", " 'width: 100%; text-align: center; padding: 3px;'\n", " );\n", " titlebar.appendChild(titletext);\n", " this.root.appendChild(titlebar);\n", " this.header = titletext;\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._init_canvas = function () {\n", " var fig = this;\n", "\n", " var canvas_div = (this.canvas_div = document.createElement('div'));\n", " canvas_div.setAttribute(\n", " 'style',\n", " 'border: 1px solid #ddd;' +\n", " 'box-sizing: content-box;' +\n", " 'clear: both;' +\n", " 'min-height: 1px;' +\n", " 'min-width: 1px;' +\n", " 'outline: 0;' +\n", " 'overflow: hidden;' +\n", " 'position: relative;' +\n", " 'resize: both;'\n", " );\n", "\n", " function on_keyboard_event_closure(name) {\n", " return function (event) {\n", " return fig.key_event(event, name);\n", " };\n", " }\n", "\n", " canvas_div.addEventListener(\n", " 'keydown',\n", " on_keyboard_event_closure('key_press')\n", " );\n", " canvas_div.addEventListener(\n", " 'keyup',\n", " on_keyboard_event_closure('key_release')\n", " );\n", "\n", " this._canvas_extra_style(canvas_div);\n", " this.root.appendChild(canvas_div);\n", "\n", " var canvas = (this.canvas = document.createElement('canvas'));\n", " canvas.classList.add('mpl-canvas');\n", " canvas.setAttribute('style', 'box-sizing: content-box;');\n", "\n", " this.context = canvas.getContext('2d');\n", "\n", " var backingStore =\n", " this.context.backingStorePixelRatio ||\n", " this.context.webkitBackingStorePixelRatio ||\n", " this.context.mozBackingStorePixelRatio ||\n", " this.context.msBackingStorePixelRatio ||\n", " this.context.oBackingStorePixelRatio ||\n", " this.context.backingStorePixelRatio ||\n", " 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", " 'canvas'\n", " ));\n", " rubberband_canvas.setAttribute(\n", " 'style',\n", " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", " );\n", "\n", " var resizeObserver = new ResizeObserver(function (entries) {\n", " var nentries = entries.length;\n", " for (var i = 0; i < nentries; i++) {\n", " var entry = entries[i];\n", " var width, height;\n", " if (entry.contentBoxSize) {\n", " if (entry.contentBoxSize instanceof Array) {\n", " // Chrome 84 implements new version of spec.\n", " width = entry.contentBoxSize[0].inlineSize;\n", " height = entry.contentBoxSize[0].blockSize;\n", " } else {\n", " // Firefox implements old version of spec.\n", " width = entry.contentBoxSize.inlineSize;\n", " height = entry.contentBoxSize.blockSize;\n", " }\n", " } else {\n", " // Chrome <84 implements even older version of spec.\n", " width = entry.contentRect.width;\n", " height = entry.contentRect.height;\n", " }\n", "\n", " // Keep the size of the canvas and rubber band canvas in sync with\n", " // the canvas container.\n", " if (entry.devicePixelContentBoxSize) {\n", " // Chrome 84 implements new version of spec.\n", " canvas.setAttribute(\n", " 'width',\n", " entry.devicePixelContentBoxSize[0].inlineSize\n", " );\n", " canvas.setAttribute(\n", " 'height',\n", " entry.devicePixelContentBoxSize[0].blockSize\n", " );\n", " } else {\n", " canvas.setAttribute('width', width * mpl.ratio);\n", " canvas.setAttribute('height', height * mpl.ratio);\n", " }\n", " canvas.setAttribute(\n", " 'style',\n", " 'width: ' + width + 'px; height: ' + height + 'px;'\n", " );\n", "\n", " rubberband_canvas.setAttribute('width', width);\n", " rubberband_canvas.setAttribute('height', height);\n", "\n", " // And update the size in Python. We ignore the initial 0/0 size\n", " // that occurs as the element is placed into the DOM, which should\n", " // otherwise not happen due to the minimum size styling.\n", " if (width != 0 && height != 0) {\n", " fig.request_resize(width, height);\n", " }\n", " }\n", " });\n", " resizeObserver.observe(canvas_div);\n", "\n", " function on_mouse_event_closure(name) {\n", " return function (event) {\n", " return fig.mouse_event(event, name);\n", " };\n", " }\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mousedown',\n", " on_mouse_event_closure('button_press')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseup',\n", " on_mouse_event_closure('button_release')\n", " );\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband_canvas.addEventListener(\n", " 'mousemove',\n", " on_mouse_event_closure('motion_notify')\n", " );\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mouseenter',\n", " on_mouse_event_closure('figure_enter')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseleave',\n", " on_mouse_event_closure('figure_leave')\n", " );\n", "\n", " canvas_div.addEventListener('wheel', function (event) {\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " on_mouse_event_closure('scroll')(event);\n", " });\n", "\n", " canvas_div.appendChild(canvas);\n", " canvas_div.appendChild(rubberband_canvas);\n", "\n", " this.rubberband_context = rubberband_canvas.getContext('2d');\n", " this.rubberband_context.strokeStyle = '#000000';\n", "\n", " this._resize_canvas = function (width, height, forward) {\n", " if (forward) {\n", " canvas_div.style.width = width + 'px';\n", " canvas_div.style.height = height + 'px';\n", " }\n", " };\n", "\n", " // Disable right mouse context menu.\n", " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", " event.preventDefault();\n", " return false;\n", " });\n", "\n", " function set_focus() {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'mpl-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " continue;\n", " }\n", "\n", " var button = (fig.buttons[name] = document.createElement('button'));\n", " button.classList = 'mpl-widget';\n", " button.setAttribute('role', 'button');\n", " button.setAttribute('aria-disabled', 'false');\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", "\n", " var icon_img = document.createElement('img');\n", " icon_img.src = '_images/' + image + '.png';\n", " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", " icon_img.alt = tooltip;\n", " button.appendChild(icon_img);\n", "\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " var fmt_picker = document.createElement('select');\n", " fmt_picker.classList = 'mpl-widget';\n", " toolbar.appendChild(fmt_picker);\n", " this.format_dropdown = fmt_picker;\n", "\n", " for (var ind in mpl.extensions) {\n", " var fmt = mpl.extensions[ind];\n", " var option = document.createElement('option');\n", " option.selected = fmt === mpl.default_extension;\n", " option.innerHTML = fmt;\n", " fmt_picker.appendChild(option);\n", " }\n", "\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "};\n", "\n", "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", " // which will in turn request a refresh of the image.\n", " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", "};\n", "\n", "mpl.figure.prototype.send_message = function (type, properties) {\n", " properties['type'] = type;\n", " properties['figure_id'] = this.id;\n", " this.ws.send(JSON.stringify(properties));\n", "};\n", "\n", "mpl.figure.prototype.send_draw_message = function () {\n", " if (!this.waiting) {\n", " this.waiting = true;\n", " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " var format_dropdown = fig.format_dropdown;\n", " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", " fig.ondownload(fig, format);\n", "};\n", "\n", "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", " var size = msg['size'];\n", " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", " fig._resize_canvas(size[0], size[1], msg['forward']);\n", " fig.send_message('refresh', {});\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", " var x0 = msg['x0'] / mpl.ratio;\n", " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", " var x1 = msg['x1'] / mpl.ratio;\n", " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", " x0 = Math.floor(x0) + 0.5;\n", " y0 = Math.floor(y0) + 0.5;\n", " x1 = Math.floor(x1) + 0.5;\n", " y1 = Math.floor(y1) + 0.5;\n", " var min_x = Math.min(x0, x1);\n", " var min_y = Math.min(y0, y1);\n", " var width = Math.abs(x1 - x0);\n", " var height = Math.abs(y1 - y0);\n", "\n", " fig.rubberband_context.clearRect(\n", " 0,\n", " 0,\n", " fig.canvas.width / mpl.ratio,\n", " fig.canvas.height / mpl.ratio\n", " );\n", "\n", " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", "};\n", "\n", "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", " // Updates the figure title.\n", " fig.header.textContent = msg['label'];\n", "};\n", "\n", "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", " var cursor = msg['cursor'];\n", " switch (cursor) {\n", " case 0:\n", " cursor = 'pointer';\n", " break;\n", " case 1:\n", " cursor = 'default';\n", " break;\n", " case 2:\n", " cursor = 'crosshair';\n", " break;\n", " case 3:\n", " cursor = 'move';\n", " break;\n", " }\n", " fig.rubberband_canvas.style.cursor = cursor;\n", "};\n", "\n", "mpl.figure.prototype.handle_message = function (fig, msg) {\n", " fig.message.textContent = msg['message'];\n", "};\n", "\n", "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", " // Request the server to send over a new figure.\n", " fig.send_draw_message();\n", "};\n", "\n", "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", " fig.image_mode = msg['mode'];\n", "};\n", "\n", "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", " for (var key in msg) {\n", " if (!(key in fig.buttons)) {\n", " continue;\n", " }\n", " fig.buttons[key].disabled = !msg[key];\n", " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", " if (msg['mode'] === 'PAN') {\n", " fig.buttons['Pan'].classList.add('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " } else if (msg['mode'] === 'ZOOM') {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.add('active');\n", " } else {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " }\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Called whenever the canvas gets updated.\n", " this.send_message('ack', {});\n", "};\n", "\n", "// A function to construct a web socket function for onmessage handling.\n", "// Called in the figure constructor.\n", "mpl.figure.prototype._make_on_message_function = function (fig) {\n", " return function socket_on_message(evt) {\n", " if (evt.data instanceof Blob) {\n", " /* FIXME: We get \"Resource interpreted as Image but\n", " * transferred with MIME type text/plain:\" errors on\n", " * Chrome. But how to set the MIME type? It doesn't seem\n", " * to be part of the websocket stream */\n", " evt.data.type = 'image/png';\n", "\n", " /* Free the memory for the previous frames */\n", " if (fig.imageObj.src) {\n", " (window.URL || window.webkitURL).revokeObjectURL(\n", " fig.imageObj.src\n", " );\n", " }\n", "\n", " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", " evt.data\n", " );\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " } else if (\n", " typeof evt.data === 'string' &&\n", " evt.data.slice(0, 21) === 'data:image/png;base64'\n", " ) {\n", " fig.imageObj.src = evt.data;\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", "\n", " var msg = JSON.parse(evt.data);\n", " var msg_type = msg['type'];\n", "\n", " // Call the \"handle_{type}\" callback, which takes\n", " // the figure and JSON message as its only arguments.\n", " try {\n", " var callback = fig['handle_' + msg_type];\n", " } catch (e) {\n", " console.log(\n", " \"No handler for the '\" + msg_type + \"' message type: \",\n", " msg\n", " );\n", " return;\n", " }\n", "\n", " if (callback) {\n", " try {\n", " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", " callback(fig, msg);\n", " } catch (e) {\n", " console.log(\n", " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", " e,\n", " e.stack,\n", " msg\n", " );\n", " }\n", " }\n", " };\n", "};\n", "\n", "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", "mpl.findpos = function (e) {\n", " //this section is from http://www.quirksmode.org/js/events_properties.html\n", " var targ;\n", " if (!e) {\n", " e = window.event;\n", " }\n", " if (e.target) {\n", " targ = e.target;\n", " } else if (e.srcElement) {\n", " targ = e.srcElement;\n", " }\n", " if (targ.nodeType === 3) {\n", " // defeat Safari bug\n", " targ = targ.parentNode;\n", " }\n", "\n", " // pageX,Y are the mouse positions relative to the document\n", " var boundingRect = targ.getBoundingClientRect();\n", " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", "\n", " return { x: x, y: y };\n", "};\n", "\n", "/*\n", " * return a copy of an object with only non-object keys\n", " * we need this to avoid circular references\n", " * http://stackoverflow.com/a/24161582/3208463\n", " */\n", "function simpleKeys(original) {\n", " return Object.keys(original).reduce(function (obj, key) {\n", " if (typeof original[key] !== 'object') {\n", " obj[key] = original[key];\n", " }\n", " return obj;\n", " }, {});\n", "}\n", "\n", "mpl.figure.prototype.mouse_event = function (event, name) {\n", " var canvas_pos = mpl.findpos(event);\n", "\n", " if (name === 'button_press') {\n", " this.canvas.focus();\n", " this.canvas_div.focus();\n", " }\n", "\n", " var x = canvas_pos.x * mpl.ratio;\n", " var y = canvas_pos.y * mpl.ratio;\n", "\n", " this.send_message(name, {\n", " x: x,\n", " y: y,\n", " button: event.button,\n", " step: event.step,\n", " guiEvent: simpleKeys(event),\n", " });\n", "\n", " /* This prevents the web browser from automatically changing to\n", " * the text insertion cursor when the button is pressed. We want\n", " * to control all of the cursor setting manually through the\n", " * 'cursor' event from matplotlib */\n", " event.preventDefault();\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", " // Handle any extra behaviour associated with a key event\n", "};\n", "\n", "mpl.figure.prototype.key_event = function (event, name) {\n", " // Prevent repeat events\n", " if (name === 'key_press') {\n", " if (event.which === this._key) {\n", " return;\n", " } else {\n", " this._key = event.which;\n", " }\n", " }\n", " if (name === 'key_release') {\n", " this._key = null;\n", " }\n", "\n", " var value = '';\n", " if (event.ctrlKey && event.which !== 17) {\n", " value += 'ctrl+';\n", " }\n", " if (event.altKey && event.which !== 18) {\n", " value += 'alt+';\n", " }\n", " if (event.shiftKey && event.which !== 16) {\n", " value += 'shift+';\n", " }\n", "\n", " value += 'k';\n", " value += event.which.toString();\n", "\n", " this._key_event_extra(event, name);\n", "\n", " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", " if (name === 'download') {\n", " this.handle_save(this, null);\n", " } else {\n", " this.send_message('toolbar_button', { name: name });\n", " }\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", " this.message.textContent = tooltip;\n", "};\n", "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", "\n", "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", "\n", "mpl.default_extension = \"png\";/* global mpl */\n", "\n", "var comm_websocket_adapter = function (comm) {\n", " // Create a \"websocket\"-like object which calls the given IPython comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function () {\n", " comm.close();\n", " };\n", " ws.send = function (m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function (msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data']);\n", " });\n", " return ws;\n", "};\n", "\n", "mpl.mpl_figure_comm = function (comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = document.getElementById(id);\n", " var ws_proxy = comm_websocket_adapter(comm);\n", "\n", " function ondownload(figure, _format) {\n", " window.open(figure.canvas.toDataURL());\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element;\n", " fig.cell_info = mpl.find_output_cell(\"
\");\n", " if (!fig.cell_info) {\n", " console.error('Failed to find cell for figure', id, fig);\n", " return;\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function (fig, msg) {\n", " var width = fig.canvas.width / mpl.ratio;\n", " fig.root.removeEventListener('remove', this._remove_fig_handler);\n", "\n", " // Update the output cell to use the data from the current canvas.\n", " fig.push_to_output();\n", " var dataURL = fig.canvas.toDataURL();\n", " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", " // the notebook keyboard shortcuts fail.\n", " IPython.keyboard_manager.enable();\n", " fig.parent_element.innerHTML =\n", " '';\n", " fig.close_ws(fig, msg);\n", "};\n", "\n", "mpl.figure.prototype.close_ws = function (fig, msg) {\n", " fig.send_message('closing', msg);\n", " // fig.ws.close()\n", "};\n", "\n", "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", " // Turn the data on the canvas into data in the output cell.\n", " var width = this.canvas.width / mpl.ratio;\n", " var dataURL = this.canvas.toDataURL();\n", " this.cell_info[1]['text/html'] =\n", " '';\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Tell IPython that the notebook contents must change.\n", " IPython.notebook.set_dirty(true);\n", " this.send_message('ack', {});\n", " var fig = this;\n", " // Wait a second, then push the new image to the DOM so\n", " // that it is saved nicely (might be nice to debounce this).\n", " setTimeout(function () {\n", " fig.push_to_output();\n", " }, 1000);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'btn-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " var button;\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " continue;\n", " }\n", "\n", " button = fig.buttons[name] = document.createElement('button');\n", " button.classList = 'btn btn-default';\n", " button.href = '#';\n", " button.title = name;\n", " button.innerHTML = '';\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message pull-right';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "\n", " // Add the close button to the window.\n", " var buttongrp = document.createElement('div');\n", " buttongrp.classList = 'btn-group inline pull-right';\n", " button = document.createElement('button');\n", " button.classList = 'btn btn-mini btn-primary';\n", " button.href = '#';\n", " button.title = 'Stop Interaction';\n", " button.innerHTML = '';\n", " button.addEventListener('click', function (_evt) {\n", " fig.handle_close(fig, {});\n", " });\n", " button.addEventListener(\n", " 'mouseover',\n", " on_mouseover_closure('Stop Interaction')\n", " );\n", " buttongrp.appendChild(button);\n", " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", "};\n", "\n", "mpl.figure.prototype._remove_fig_handler = function () {\n", " this.close_ws(this, {});\n", "};\n", "\n", "mpl.figure.prototype._root_extra_style = function (el) {\n", " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", " el.addEventListener('remove', this._remove_fig_handler);\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (el) {\n", " // this is important to make the div 'focusable\n", " el.setAttribute('tabindex', 0);\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " } else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager) {\n", " manager = IPython.keyboard_manager;\n", " }\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which === 13) {\n", " this.canvas_div.blur();\n", " // select the cell after this one\n", " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", " IPython.notebook.select(index + 1);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " fig.ondownload(fig, null);\n", "};\n", "\n", "mpl.find_output_cell = function (html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i = 0; i < ncells; i++) {\n", " var cell = cells[i];\n", " if (cell.cell_type === 'code') {\n", " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", " var data = cell.output_area.outputs[j];\n", " if (data.data) {\n", " // IPython >= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] === html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "};\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel !== null) {\n", " IPython.notebook.kernel.comm_manager.register_target(\n", " 'matplotlib',\n", " mpl.mpl_figure_comm\n", " );\n", "}\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib notebook\n", "import matplotlib.pyplot as plt\n", "import matplotlib.animation\n", "\n", "cmap_args=dict(vmin=-1., vmax=1., cmap='plasma_r')\n", "fig, ax = plt.subplots()\n", "\n", "im = ax.imshow(states[0].reshape(L,L), **cmap_args)\n", "\n", "def animate(i):\n", " im.set_data(states[i+1].reshape(L,L),)\n", " ax.set_title('sample number: i={0:d}'.format(i+1))\n", "\n", "_m=8 # show every _m-th frame\n", "ani = matplotlib.animation.FuncAnimation(fig, animate, frames=np.arange(1,len(states),_m)+_m)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Last, we want to look at arbitrary spin configurations sampled at different temperatures $T$. \n", "\n", "To do this, we create a set of temperatures, and then use Metropolis-Hastings to generate a sample of spin configurations at every temperature. We then plot the last three spin configs present in the sample for every $T$." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "T=1.50, =-1.7241, =0.2729\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "T=2.00, =-1.4935, =-0.4012\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "T=2.50, =-1.0888, =0.0658\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "T=3.00, =-0.8095, =0.0413\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "T=3.50, =-0.6711, =0.0036\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "T=4.00, =-0.5513, =0.0129\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "\n", "# define set of temperatures across the critical point\n", "T_vec=np.linspace(1.5,4.0,num=6)\n", "\n", "# preallocate data\n", "E_density=np.zeros_like(T_vec)\n", "M_density=np.zeros_like(T_vec)\n", "\n", "for T_counter, T in enumerate(T_vec):\n", " \n", " # run MC sampler\n", " states, energies = sample(T)\n", " \n", " # compute mean energy and magnetization\n", " e_density=np.mean(energies)/N_sites\n", " m_density=np.mean(states,)\n", " \n", " E_density[T_counter]=e_density\n", " M_density[T_counter]=m_density\n", "\n", " print(\"T={0:0.2f}, ={1:0.4f}, ={2:0.4f}\".format(T, e_density, m_density) )\n", " \n", " \n", " # plot data\n", " \n", " # get last three states in the Markov chain \n", " S_0=states[-1].reshape(L,L)\n", " S_1=states[-2].reshape(L,L)\n", " S_2=states[-3].reshape(L,L)\n", " \n", " # set colorbar parameters\n", " cmap_args=dict(vmin=-1., vmax=1., cmap='plasma_r')\n", "\n", " fig, axarr = plt.subplots(nrows=1, ncols=3)\n", " \n", " axarr[0].imshow(S_0,**cmap_args)\n", " axarr[0].set_title('spin config.: T={0:0.2f}'.format(T))\n", " axarr[0].tick_params(labelsize=16)\n", " \n", " axarr[1].imshow(S_1,**cmap_args)\n", " axarr[1].set_title('spin config.: T={0:0.2f}'.format(T))\n", " axarr[1].tick_params(labelsize=16)\n", " \n", " im=axarr[2].imshow(S_2,**cmap_args)\n", " axarr[2].set_title('spin config.: T={0:0.2f}'.format(T))\n", " axarr[2].tick_params(labelsize=16)\n", " \n", " fig.subplots_adjust(right=2.0)\n", " \n", " plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "RL_class", "language": "python", "name": "rl_class" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.7" }, "latex_metadata": { "affiliation": "Faculty of Physics, Sofia University, 5 James Bourchier Blvd., 1164 Sofia, Bulgaria", "author": "Marin Bukov", "title": "Reinforcement Learning Course: WiSe 2020/21" } }, "nbformat": 4, "nbformat_minor": 4 }