{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Example of how to use Jupyter\n", "\n", "See also the web pages about:\n", "\n", "The notebook interface called Jupyter \n", "https://jupyter.readthedocs.io/en/latest/index.html\n", "\n", "The language used is Python (specifically python 2.7, but python 3 also works fine) \n", "https://www.python.org/doc/\n", "\n", "The libraries providing the Maths and statistics functions: Scipy and Numpy \n", "https://scipy.org/\n", "\n", "Finally the graphing engine matplotlib \n", "http://matplotlib.org/" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cell types\n", "Cell types can be either code (the default), results (generated by running code cells) or \"Markdown\" which is documentation for output, like this cell. You can set the cell type from the menu above.\n", "\n", "See http://jupyter-notebook.readthedocs.io/en/latest/examples/Notebook/Working%20With%20Markdown%20Cells.html for details of what you can do in a Markdown cell. Including headers, *highlighting*, \n", " \n", " print(\"and example code\")\n", " \n", "Double click on this cell to see how it is formatted and note the \"Markdown\" cell type in the menu bar." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Python\n", "The language is very rich so this is not even a cursory introduction, but an example of some code" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "('one', 'two')\n" ] } ], "source": [ "# Everything after a # is a comment for the reader only\n", "var=\"one\" # set a variable called var to the string \"one\"\n", "v2 = 'two' # set another variable, v2, to \"two\", variable must start with a letter but can contain numbers\n", "# note \"a\" and 'a' are both strings, the quotes just have to match\n", "print(var,v2) # note print automatically adds a space between elements if given a list and adds a new line" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "i = 9 # integer\n", "j = 10. # float (as indicated by the decimal point)\n", "l = [11.1,12] # list of float, int\n", "m = (\"size\",\"fish\",7) # tuple of string, string, int (tuples can not be added to, lists can)\n", "n = [i,j,l,m] # list constructed from existing elements, including both other lists and tuples\n", "o = {'one':1,'two':2} # dictionary relating pairs of elements, first is the key, the second the value" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "('i', 9, <type 'int'>)\n", "('j', 10.0, <type 'float'>)\n", "('l', [11.1, 12], <type 'list'>)\n", "('m', ('size', 'fish', 7), <type 'tuple'>)\n", "('n', [9, 10.0, [11.1, 12], ('size', 'fish', 7)], <type 'list'>)\n", "('o', {'two': 2, 'one': 1}, <type 'dict'>)\n" ] } ], "source": [ "print('i',i,type(i)) # type(x) gives the type of x, as a string if printed\n", "print('j',j,type(j))\n", "print('l',l,type(l))\n", "print('m',m,type(m))\n", "print('n',n,type(n))\n", "print('o',o,type(o))" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "('l[0] l[1]', 11.1, 12)\n", "('m[0] m[1] m[2]', 'size', 'fish', 7)\n", "('o[\"one\"] o[\"two\"]', 1, 2)\n" ] } ], "source": [ "# access elements of lists or tuples\n", "print('l[0] l[1]',l[0],l[1])\n", "print('m[0] m[1] m[2]',m[0],m[1],m[2])\n", "print('o[\"one\"] o[\"two\"]',o[\"one\"],o[\"two\"]) # note if you start a string with ' you can use \" in it (and vice versa)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "('1+2 =', 3)\n", "('119.9765/35478. =', 0.0033817154292801175)\n" ] } ], "source": [ "# maths is supported (not supprisingly)\n", "print('1+2 =',1+2)\n", "print('119.9765/35478. =',119.9765/35478.)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(9, 'is less than or equal to 10')\n", "Continuing false path\n", "do always (after conditional)\n" ] } ], "source": [ "# conditional statements\n", "if(i>10): # if thing in brackets is true do first part\n", " print(i,'is bigger than 10') # python uses spaces at the start of the line to define blocks of code\n", " print('Still on true path')\n", "else: # part to do if false\n", " print(i,'is less than or equal to 10')\n", " print('Continuing false path')\n", "# end a block by lining the first charater of the string up with the statement before the block\n", "print(\"do always (after conditional)\")" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(9, <type 'int'>)\n", "(10.0, <type 'float'>)\n", "([11.1, 12], <type 'list'>)\n", "Content is\n", "(' + ', 11.1, <type 'float'>)\n", "(' + ', 12, <type 'int'>)\n", "(('size', 'fish', 7), <type 'tuple'>)\n", "Content is\n", "(' + ', 'size', <type 'str'>)\n", "(' + ', 'fish', <type 'str'>)\n", "(' + ', 7, <type 'int'>)\n" ] } ], "source": [ "# loops\n", "for v in n: # all element of n are accessed as v in turn (n was defined above)\n", " print(v,type(v)) # show v \n", " # see if v can also be iterated over, \"is\" means compare (== means compare value), \"and\" and \"or\" allow complex queries\n", " if(type(v) is tuple or type(v) is list): # if inside a loop \n", " print(\"Content is\")\n", " for w in v: # more indenting to make it clear this loop is inside the if statement\n", " print(' + ',w,type(w)) # add a \" + \" to the output to get an indent there as well\n", "# note you do not have to provide an \"else\" if there is nothing to do for false" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0: 0**0=1 0**1=0 0**2=0 0**3=0 0**4=0 ()\n", "1: 1**0=1 1**1=1 1**2=1 1**3=1 1**4=1 ()\n", "2: 2**0=1 2**1=2 2**2=4 2**3=8 2**4=16 ()\n", "3: 3**0=1 3**1=3 3**2=9 3**3=27 3**4=81 ()\n", "4: 4**0=1 4**1=4 4**2=16 4**3=64 4**4=256 ()\n", "5: 5**0=1 5**1=5 5**2=25 5**3=125 5**4=625 ()\n", "6: 6**0=1 6**1=6 6**2=36 6**3=216 6**4=1296 ()\n", "7: 7**0=1 7**1=7 7**2=49 7**3=343 7**4=2401 ()\n", "8: 8**0=1 8**1=8 8**2=64 8**3=512 8**4=4096 ()\n", "9: 9**0=1 9**1=9 9**2=81 9**3=729 9**4=6561 ()\n", "10: 10**0=1 10**1=10 10**2=100 10**3=1000 10**4=10000 ()\n", "11: 11**0=1 11**1=11 11**2=121 11**3=1331 11**4=14641 ()\n", "12: 12**0=1 12**1=12 12**2=144 12**3=1728 12**4=20736 ()\n", "13: 13**0=1 13**1=13 13**2=169 13**3=2197 13**4=28561 ()\n", "14: 14**0=1 14**1=14 14**2=196 14**3=2744 14**4=38416 ()\n", "15: 15**0=1 15**1=15 15**2=225 15**3=3375 15**4=50625 ()\n", "16: 16**0=1 16**1=16 16**2=256 16**3=4096 16**4=65536 ()\n", "17: 17**0=1 17**1=17 17**2=289 17**3=4913 17**4=83521 ()\n", "18: 18**0=1 18**1=18 18**2=324 18**3=5832 18**4=104976 ()\n", "19: 19**0=1 19**1=19 19**2=361 19**3=6859 19**4=130321 ()\n" ] } ], "source": [ "# loop over values\n", "for i in range(20): # the range(n) function creates all the integers from 0 -> n-1 inclusive\n", " print(\"{}:\".format(i)), # \"string {}\".format(a) replaces the {} in the string with a text version of variable i\n", " # comma at the end means no new line\n", " for j in range(5): # loop inside a loop (must loop with different variables)\n", " print(\" {}**{}={}\".format(i,j,i**j)), # print the first 5 powers of i (i**j means i to the power of j)\n", " print() # print by itself just adds a new line\n", " \n", "# for i in range(20) :\n", "# print(\"{}: {}**{}={}\".format(i,i,j,i**j)) # this is a shorter version of the above" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "?float\n", "On its own line gives a new window with the help text for the built in float function,\n", "you can do this for any variable or function\n" ] } ], "source": [ "print(\"?float\")\n", "print(\"On its own line gives a new window with the help text for the built in float function,\\nyou can do this for any variable or function\")" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "?float" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5\n" ] } ], "source": [ "# define a function\n", "def func(x,m,c):\n", " \"\"\"Text in triple quotes is the help text for the function! This function just returns x*m + c\"\"\"\n", " return x*m + c\n", "# call your new function\n", "print(func(1,2,3))\n", "?func" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Numpy\n", "This adds better arrays to python for doing maths and brings in many maths functions (sqrt, sin, ... etc.)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(<type 'numpy.ndarray'>, array([ 0. , 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08,\n", " 0.09, 0.1 , 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17,\n", " 0.18, 0.19, 0.2 , 0.21, 0.22, 0.23, 0.24, 0.25, 0.26,\n", " 0.27, 0.28, 0.29, 0.3 , 0.31, 0.32, 0.33, 0.34, 0.35,\n", " 0.36, 0.37, 0.38, 0.39, 0.4 , 0.41, 0.42, 0.43, 0.44,\n", " 0.45, 0.46, 0.47, 0.48, 0.49, 0.5 , 0.51, 0.52, 0.53,\n", " 0.54, 0.55, 0.56, 0.57, 0.58, 0.59, 0.6 , 0.61, 0.62,\n", " 0.63, 0.64, 0.65, 0.66, 0.67, 0.68, 0.69, 0.7 , 0.71,\n", " 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.78, 0.79, 0.8 ,\n", " 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87, 0.88, 0.89,\n", " 0.9 , 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98,\n", " 0.99, 1. ]))\n" ] } ], "source": [ "import numpy as np # import the package with a user chosen short name, that is used before all functions\n", "x = np.linspace(0,1,101) # make 101 equally spaced numbers from 0 to 100 inclusive\n", "print(type(x),x)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 3. 3.02 3.04 3.06 3.08 3.1 3.12 3.14 3.16 3.18 3.2 3.22\n", " 3.24 3.26 3.28 3.3 3.32 3.34 3.36 3.38 3.4 3.42 3.44 3.46\n", " 3.48 3.5 3.52 3.54 3.56 3.58 3.6 3.62 3.64 3.66 3.68 3.7\n", " 3.72 3.74 3.76 3.78 3.8 3.82 3.84 3.86 3.88 3.9 3.92 3.94\n", " 3.96 3.98 4. 4.02 4.04 4.06 4.08 4.1 4.12 4.14 4.16 4.18\n", " 4.2 4.22 4.24 4.26 4.28 4.3 4.32 4.34 4.36 4.38 4.4 4.42\n", " 4.44 4.46 4.48 4.5 4.52 4.54 4.56 4.58 4.6 4.62 4.64 4.66\n", " 4.68 4.7 4.72 4.74 4.76 4.78 4.8 4.82 4.84 4.86 4.88 4.9\n", " 4.92 4.94 4.96 4.98 5. ]\n" ] } ], "source": [ "# the power comes as you can pass numpy arrays to many functions and get back an array with the results for\n", "# all of the inputs\n", "y = func(x,2.,3) # note func will work with any sane combination of types\n", "print(y)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 3. 3.03 3.06 3.09 3.12 3.15 3.18 3.21 3.24 3.27 3.3 3.33\n", " 3.36 3.39 3.42 3.45 3.48 3.51 3.54 3.57 3.6 3.63 3.66 3.69\n", " 3.72 3.75 3.78 3.81 3.84 3.87 3.9 3.93 3.96 3.99 4.02 4.05\n", " 4.08 4.11 4.14 4.17 4.2 4.23 4.26 4.29 4.32 4.35 4.38 4.41\n", " 4.44 4.47 4.5 4.53 4.56 4.59 4.62 4.65 4.68 4.71 4.74 4.77\n", " 4.8 4.83 4.86 4.89 4.92 4.95 4.98 5.01 5.04 5.07 5.1 5.13\n", " 5.16 5.19 5.22 5.25 5.28 5.31 5.34 5.37 5.4 5.43 5.46 5.49\n", " 5.52 5.55 5.58 5.61 5.64 5.67 5.7 5.73 5.76 5.79 5.82 5.85\n", " 5.88 5.91 5.94 5.97 6. ]\n" ] } ], "source": [ "print(x+y) # if two arrays the same length we can add element by element" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0. 0.00331126 0.00657895 0.00980392 0.01298701 0.01612903\n", " 0.01923077 0.02229299 0.02531646 0.02830189 0.03125 0.03416149\n", " 0.03703704 0.0398773 0.04268293 0.04545455 0.04819277 0.0508982\n", " 0.05357143 0.05621302 0.05882353 0.06140351 0.06395349 0.06647399\n", " 0.06896552 0.07142857 0.07386364 0.07627119 0.07865169 0.08100559\n", " 0.08333333 0.08563536 0.08791209 0.09016393 0.0923913 0.09459459\n", " 0.09677419 0.09893048 0.10106383 0.1031746 0.10526316 0.10732984\n", " 0.109375 0.11139896 0.11340206 0.11538462 0.11734694 0.11928934\n", " 0.12121212 0.12311558 0.125 0.12686567 0.12871287 0.13054187\n", " 0.13235294 0.13414634 0.13592233 0.13768116 0.13942308 0.14114833\n", " 0.14285714 0.14454976 0.14622642 0.14788732 0.14953271 0.15116279\n", " 0.15277778 0.15437788 0.1559633 0.15753425 0.15909091 0.16063348\n", " 0.16216216 0.16367713 0.16517857 0.16666667 0.16814159 0.16960352\n", " 0.17105263 0.17248908 0.17391304 0.17532468 0.17672414 0.17811159\n", " 0.17948718 0.18085106 0.18220339 0.1835443 0.18487395 0.18619247\n", " 0.1875 0.18879668 0.19008264 0.19135802 0.19262295 0.19387755\n", " 0.19512195 0.19635628 0.19758065 0.19879518 0.2 ]\n" ] } ], "source": [ "print(x/y) # or divide " ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 4.47712125 4.48000694 4.48287358 4.48572143 4.48855072 4.49136169\n", " 4.49415459 4.49692965 4.49968708 4.50242712 4.50514998 4.50785587\n", " 4.51054501 4.5132176 4.51587384 4.51851394 4.52113808 4.52374647\n", " 4.52633928 4.5289167 4.53147892 4.53402611 4.53655844 4.5390761\n", " 4.54157924 4.54406804 4.54654266 4.54900326 4.55145 4.55388303\n", " 4.5563025 4.55870857 4.56110138 4.56348109 4.56584782 4.56820172\n", " 4.57054294 4.5728716 4.57518784 4.5774918 4.5797836 4.58206336\n", " 4.58433122 4.5865873 4.58883173 4.59106461 4.59328607 4.59549622\n", " 4.59769519 4.59988307 4.60205999 4.60422605 4.60638137 4.60852603\n", " 4.61066016 4.61278386 4.61489722 4.61700034 4.61909333 4.62117628\n", " 4.62324929 4.62531245 4.62736586 4.6294096 4.63144377 4.63346846\n", " 4.63548375 4.63748973 4.63948649 4.64147411 4.64345268 4.64542227\n", " 4.64738297 4.64933486 4.65127801 4.65321251 4.65513843 4.65705585\n", " 4.65896484 4.66086548 4.66275783 4.66464198 4.66651798 4.66838592\n", " 4.67024585 4.67209786 4.673942 4.67577834 4.67760695 4.6794279\n", " 4.68124124 4.68304704 4.68484536 4.68663627 4.68841982 4.69019608\n", " 4.6919651 4.69372695 4.69548168 4.69722934 4.69897 ]\n" ] } ], "source": [ "print(np.log10(y)+4) # if the array is added to a single number then add to all elements" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Scipy\n", "This adds a lot of high level routines, such as numerical integration, minimum finding and many other things\n", "See the documentation for everything it does" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from scipy.integrate import quad # import a single routine from a subpackage of scipy\n", "?quad # list all of the options for quad" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "intergal of func(x,7,2) from x = 1 to 10 is 364.5 +- 4.04676292476e-12\n" ] } ], "source": [ "# integrate func we defined above (func = m*x + c) from 1 to 10, with m=7 and c=2\n", "result, err = quad(func,a=1,b=10,args=(7,2)) # named arguments can be set by order or by name, here two values are returned\n", "print(\"intergal of func(x,7,2) from x = 1 to 10 is {} +- {}\".format(result,err))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "which should be $\\int_1^{10} (7x + 2) dx = \\left[ \\frac{7}{2}x^2+2x \\right]_1^{10} = [700/2 + 20] - [7/2 + 2] = 370 - 5.5 = 364.5$ \n", "Double click on this cell to see how to add maths to the output, using the latex language" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## matplotlib\n", "Adds graphing to pyton, inside juptyer it can display the plots straigh into the output cells" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<matplotlib.figure.Figure at 0x45385c0>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# First \"magic\" command to juypter itself instead of python, %? for full list\n", "# This sets up jupyter to display plots from matplotlib\n", "# with an inline display in the cell, without make a new window.\n", "%matplotlib inline\n", "# then make the python functions to access matplotlib available\n", "import matplotlib.pyplot as plt\n", "# draw the arrays x and y defined above\n", "plt.plot(x,y) # plot is the most basic plotting routine, will do auto axies\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "plt.show() # always put a plt.show() when you want the plot drawn" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nrkJggg==\n", "text/plain": [ "<matplotlib.figure.Figure at 0x750fcf8>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# new plot for x verse np.log10(x)+4\n", "x = np.linspace(0.2,2,100) # note reusing x, so take care when running cells out of order\n", "y = np.log10(x)\n", "plt.plot(x,np.log10(x),label=\"log10(x)\") # new option to give a name to the curve\n", "plt.plot(x,np.log(x),label=\"log(x)\") # Another curve (automatically gets a new colour)\n", "plt.plot(x,np.sqrt(x),label=\"sqrt(x)\",) # add a third curve, with an explicit colour and dash style\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "# can plot data with error bars too, look at the ?plt.errorbar for all of the options\n", "plt.errorbar(x=[0.5,1.0,1.5],y=[-0.5,-0.1,-0.01],yerr=[0.1,0.07,0.15],fmt=\"o\",label=\"random points\")\n", "plt.legend() # draw the labels to define the lines\n", "plt.show() # always put a plt.show() when you want the plot drawn" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Many more things you can do, such as log axies, grid lines, several plots in the same output, set axies ranges etc. See documentaiton for details." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Subplots" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nTkSuQmCC\n", "text/plain": [ "<matplotlib.figure.Figure at 0x1eb71978>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# First \"magic\" command to juypter itself instead of python, %? for full list\n", "# This sets up jupyter to display plots from matplotlib\n", "# with an inline display in the cell, without make a new window.\n", "%matplotlib inline\n", "# then make the python functions to access matplotlib available\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "x = np.array([10,19,32])\n", "y = x**2 + 7\n", "fig = plt.figure(figsize=(8, 6)) # set the default figure size to 8,6 (slightly larger)\n", "# now make a 2x2 array of plots and plot into the top left one (i.e. subplot 1)\n", "p = plt.subplot(221)\n", "p.plot(x,y) # some data to plot as x,y\n", "p.set_title('Top Left')\n", "p.set_xlabel('x')\n", "p.set_ylabel('y')\n", "# plot into the top right (subplot 2)\n", "p = plt.subplot(222)\n", "p.plot(x,np.sqrt(y)) \n", "p.set_title('Top Right')\n", "p.set_xlabel('x')\n", "p.set_ylabel('$\\sqrt{y}$') # note use of maths in axis label using $ math $\n", "# plot into the bottom left (subplot 3)\n", "p = plt.subplot(223)\n", "p.plot(x,np.log(y)) \n", "p.set_title('Bottom Left')\n", "p.set_xlabel('x')\n", "p.set_ylabel('$\\ln{(y)}$')\n", "# plot into the bottom right (subplot 4)\n", "p = plt.subplot(224)\n", "p.plot(np.log10(x),np.log10(y)) \n", "p.set_title('Bottom Right')\n", "p.set_xlabel('$\\log{(x)}$')\n", "p.set_ylabel('$\\log{(y)}$')\n", "# now make space for the captions and axis labels\n", "plt.tight_layout()\n", "# always put a show command where a plot should be finished\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Welcome to Python 2.7! This is the online help utility.\n", "\n", "If this is your first time using Python, you should definitely check out\n", "the tutorial on the Internet at http://docs.python.org/2.7/tutorial/.\n", "\n", "Enter the name of any module, keyword, or topic to get help on writing\n", "Python programs and using Python modules. To quit this help utility and\n", "return to the interpreter, just type \"quit\".\n", "\n", "To get a list of available modules, keywords, or topics, type \"modules\",\n", "\"keywords\", or \"topics\". Each module also comes with a one-line summary\n", "of what it does; to list the modules whose summaries contain a given word\n", "such as \"spam\", type \"modules spam\".\n", "\n" ] } ], "source": [ "help()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [Root]", "language": "python", "name": "Python [Root]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" } }, "nbformat": 4, "nbformat_minor": 2 }