day1/session1.tex
author Nishanth Amuluru <nishanth@fossee.in>
Tue, 14 Dec 2010 23:12:25 +0530
branchscipyin2010
changeset 455 84b7a3f4a15a
parent 439 d85c3ed8545c
permissions -rw-r--r--
updated the checklist to suit new circulate

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Tutorial slides on Python.
%
% Author: FOSSEE 
% Copyright (c) 2009, FOSSEE, IIT Bombay
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\documentclass[14pt,compress]{beamer}
%\documentclass[draft]{beamer}
%\documentclass[compress,handout]{beamer}
%\usepackage{pgfpages} 
%\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm]

% Modified from: generic-ornate-15min-45min.de.tex
\mode<presentation>
{
  \usetheme{Warsaw}
  \useoutertheme{infolines}
  \setbeamercovered{transparent}
}

\usepackage[english]{babel}
\usepackage[latin1]{inputenc}
%\usepackage{times}
\usepackage[T1]{fontenc}

% Taken from Fernando's slides.
\usepackage{ae,aecompl}
\usepackage{mathpazo,courier,euler}
\usepackage[scaled=.95]{helvet}

\definecolor{darkgreen}{rgb}{0,0.5,0}

\usepackage{listings}
\lstset{language=Python,
    basicstyle=\ttfamily\bfseries,
    commentstyle=\color{red}\itshape,
  stringstyle=\color{darkgreen},
  showstringspaces=false,
  keywordstyle=\color{blue}\bfseries}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Macros
\setbeamercolor{emphbar}{bg=blue!20, fg=black}
\newcommand{\emphbar}[1]
{\begin{beamercolorbox}[rounded=true]{emphbar} 
      {#1}
 \end{beamercolorbox}
}
\newcounter{time}
\setcounter{time}{0}
\newcommand{\inctime}[1]{\addtocounter{time}{#1}{\tiny \thetime\ m}}

\newcommand{\typ}[1]{\lstinline{#1}}

\newcommand{\kwrd}[1]{ \texttt{\textbf{\color{blue}{#1}}}  }

%%% This is from Fernando's setup.
% \usepackage{color}
% \definecolor{orange}{cmyk}{0,0.4,0.8,0.2}
% % Use and configure listings package for nicely formatted code
% \usepackage{listings}
% \lstset{
%    language=Python,
%    basicstyle=\small\ttfamily,
%    commentstyle=\ttfamily\color{blue},
%    stringstyle=\ttfamily\color{orange},
%    showstringspaces=false,
%    breaklines=true,
%    postbreak = \space\dots
% }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Title page
\title[Interactive Plotting]{Python for Science and Engg: Interactive Plotting}

\author[FOSSEE group] {FOSSEE}

\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay}
\date[] {SciPy.in 2010, Tutorials}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%\pgfdeclareimage[height=0.75cm]{iitmlogo}{iitmlogo}
%\logo{\pgfuseimage{iitmlogo}}


%% Delete this, if you do not want the table of contents to pop up at
%% the beginning of each subsection:
\AtBeginSubsection[]
{
  \begin{frame}<beamer>
    \frametitle{Outline}
    \tableofcontents[currentsection,currentsubsection]
  \end{frame}
}

\AtBeginSection[]
{
  \begin{frame}<beamer>
    \frametitle{Outline}
    \tableofcontents[currentsection,currentsubsection]
  \end{frame}
}

% If you wish to uncover everything in a step-wise fashion, uncomment
% the following command: 
%\beamerdefaultoverlayspecification{<+->}

%%\includeonlyframes{current,current1,current2,current3,current4,current5,current6}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DOCUMENT STARTS
\begin{document}

\begin{frame}
  \maketitle
\end{frame}

%% \begin{frame}
%%   \frametitle{Outline}
%%   \tableofcontents
%%   % You might wish to add the option [pausesections]
%% \end{frame}

\section{Checklist}
\begin{frame}
\frametitle{Checklist}
  \begin{enumerate}
    \item IPython
    \item Editor - we recommend \alert{scite}
    \item Data files: 
      \begin{itemize}
      \item \typ{anag.txt}
      \item \typ{holmes.txt}
      \item \typ{pendulum.txt}
      \item \typ{pos.txt}
      \item \typ{sslc1.txt}
      \item \typ{primes.txt}
      \end{itemize}
    \item Images
      \begin{itemize}
      \item \typ{lena.png}
      \end{itemize}
  \end{enumerate}
\end{frame}

\section{Starting up IPython}
\begin{frame}[fragile]
\frametitle{Starting up \ldots}
\begin{block}{}
\begin{lstlisting}
  $ ipython -pylab
\end{lstlisting} %$
\end{block}
\begin{lstlisting}     
  In []: print "Hello, World!"
  Hello, World!
\end{lstlisting}
Exiting
\begin{lstlisting}
  In []: ^D(Ctrl-D)
  Do you really want to exit([y]/n)? y
\end{lstlisting}
\end{frame}

\section{Plotting}
\subsection{Drawing plots}
\begin{frame}[fragile]
\frametitle{First Plot}
\begin{columns}
    \column{0.25\textwidth}
    \hspace*{-0.5in}
  \includegraphics[height=2in, interpolate=true]{data/firstplot}
    \column{0.8\textwidth}
    \begin{block}{}
    \begin{small}
\begin{lstlisting}
In []: x = linspace(0, 2*pi, 50)
In []: plot(x, sin(x))
\end{lstlisting}
    \end{small}
    \end{block}
\end{columns}
\end{frame}

\begin{frame}[fragile]
\frametitle{Walkthrough}
\begin{block}{\typ{x = linspace(start, stop, num)} }
returns \typ{num} evenly spaced points, in the interval [\typ{start}, \typ{stop}].
\end{block}
\begin{lstlisting}
x[0] = start
x[num - 1] = end
\end{lstlisting}
\vspace*{.35in}
\begin{block}{\typ{plot(x, y)}}
plots \typ{x} and \typ{y} using default line style and color
\end{block}
%\inctime{10}
\end{frame}

\subsection{Decoration}
\begin{frame}[fragile]
\frametitle{Adding Labels}
\begin{columns}
  \column{0.25\textwidth}
  \hspace*{-0.45in}
  \includegraphics[height=2in, interpolate=true]{data/label}  
  \hspace*{0.5in}
  \column{0.55\textwidth}
  \begin{block}{}
  \small
  \begin{lstlisting}
In []: xlabel('x')

In []: ylabel('sin(x)')
  \end{lstlisting}
  \small
%  \end{lstlisting}
%\typ{xlabel(s)} sets the label of the \typ{x}-axis to \typ{s}

%  \begin{lstlisting}
  \end{block}
%\typ{ylabel(s)} sets the label of the \typ{y}-axis to \typ{s}
\end{columns}
\end{frame}

\begin{frame}[fragile]
\frametitle{Another example}
  \begin{lstlisting}
In []: clf()
  \end{lstlisting}
\emphbar{Clears the plot area.}
  \begin{lstlisting}
In []: y = linspace(0, 2*pi, 50)
In []: plot(y, sin(2*y))
In []: xlabel('y')
In []: ylabel('sin(2y)')
  \end{lstlisting}
\end{frame}

\begin{frame}[fragile]
\frametitle{Title}
\vspace*{-0.15in}
%  \begin{block}{}
%  \small
\begin{lstlisting}
In []: title('Sinusoids')
\end{lstlisting}
%  \small
%  \end{block}
  \vspace*{-0.1in}
  \begin{center}
  \includegraphics[height=2in, interpolate=true]{data/title}  
  \end{center}
\end{frame}

\begin{frame}[fragile]
\frametitle{Saving \& Closing}
\begin{lstlisting}
In []: savefig('sin.png')

In []: close()
\end{lstlisting}
Supported formats to store images:
\begin{itemize}
\item png
\item eps - Easy to embed in LaTeX files
\item emf
\item pdf
\item ps
\item raw
\item rgba
\item svg
\end{itemize}
\end{frame}

\begin{frame}[fragile]
\frametitle{IPython tips \ldots}

\begin{itemize}
    \item Use \typ{TAB} to complete command 
\end{itemize}
        \vspace*{0.5in}

        {\Large \structure{History}}
\begin{itemize}
    \item Accesses history (also from past sessions)

    \item Up and down arrows (\typ{Ctrl-p}/\typ{Ctrl-n})
\end{itemize}

\end{frame}

\section{Multiple plots}
\begin{frame}[fragile]
\frametitle{Overlaid Plots}
\begin{lstlisting}
In []: clf()
In []: plot(y, sin(y))
In []: plot(y, cos(y))
In []: xlabel('y')
In []: ylabel('f(y)')
\end{lstlisting}
\emphbar{By default plots would be overlaid!}
\end{frame}

\begin{frame}[fragile]
\frametitle{Legend}
\vspace*{-0.15in}
%  \begin{block}{}
%  \small
\begin{lstlisting}
In []: legend(['sin(y)', 'cos(y)']) 
\end{lstlisting}
%  \small
%  \end{block}
  \vspace*{-0.1in}
  \begin{center}
  \includegraphics[height=2in, interpolate=true]{data/legend}  
  \end{center}
\end{frame}

\begin{frame}[fragile]
\frametitle{Legend Placement}
\begin{block}{}
    \small
\begin{lstlisting}
In []: legend(['sin(y)', 'cos(y)'], loc='center')
\end{lstlisting}
\end{block}

\begin{columns}
    \column{0.6\textwidth}
 \includegraphics[height=2in, interpolate=true]{data/position}  
\column{0.45\textwidth}
\vspace{-0.2in}
\begin{lstlisting}
'best' 
'right'
'center'
\end{lstlisting}
\end{columns}
\end{frame}

\begin{frame}[fragile]
\frametitle{Plotting separate figures}
\begin{lstlisting}
In []: clf()
In []: figure(1)
In []: plot(y, sin(y))
In []: figure(2)
In []: plot(y, cos(y))
In []: savefig('cosine.png')
In []: figure(1)
In []: title('sin(y)')
In []: savefig('sine.png')
In []: close()
In []: close()
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]
\frametitle{Showing it better}
\vspace{-0.15in}
\begin{lstlisting}
In []: plot(y, cos(y), 'r')

In []: clf()
In []: plot(y, sin(y), 'g', linewidth=2)
\end{lstlisting}
\vspace*{-0.2in}
\begin{center}
  \includegraphics[height=2.2in, interpolate=true]{data/green}  
\end{center}
%\inctime{10}
\end{frame}

\begin{frame}[fragile]
\frametitle{Annotating}
\vspace*{-0.15in}
\begin{lstlisting}
In []: annotate('local max', xy=(1.5, 1))
\end{lstlisting}
\vspace*{-0.2in}
\begin{center}
  \includegraphics[height=2in, interpolate=true]{data/annotate}  
\end{center}
\end{frame}

\begin{frame}[fragile]
\frametitle{Axes lengths}
\emphbar{Getting axes lengths}
  \begin{lstlisting}
In []: xmin, xmax = xlim() 
In []: ymin, ymax = ylim() 
In []: print xmin, xmax 
  \end{lstlisting}
\emphbar{Set the axes limits}
  \begin{lstlisting}
In []: xlim(xmin, 2*pi )
In []: ylim(ymin-0.2, ymax+0.2)
  \end{lstlisting}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Axes lengths}
  \begin{center}
    \includegraphics[height=3in, interpolate=true]{data/limits}
  \end{center}
\end{frame}

\begin{frame}[fragile]
\frametitle{IPython tips \ldots}

\begin{itemize}

    \item Try:
\begin{lstlisting}
In []: plot?
\end{lstlisting}
        to get more information on \typ{plot} 

        \vspace*{0.5in}
    \item Try: 
\begin{lstlisting}
In []: plot??
\end{lstlisting}
    to see the source code for \typ{plot}

\end{itemize}

\end{frame}


\begin{frame}[fragile]
\frametitle{Review Problem}
\begin{enumerate}
\item Plot x, -x, sin(x), xsin(x) in range $-5\pi$ to $5\pi$
\item Add a legend
\item Annotate the origin
\item Set axes limits to the range of x
\end{enumerate}
\vspace*{-0.1in}
\begin{center}
  \includegraphics[height=2.1in, interpolate=true]{data/four_plot}  
\end{center}
\end{frame}

\begin{frame}[fragile]
\frametitle{Review Problem \ldots}
\alert{Plotting \ldots}
\begin{lstlisting}
In []: x = linspace(-5*pi, 5*pi, 500)
In []: plot(x, x, 'b')
In []: plot(x, -x, 'b')
In []: plot(x, sin(x), 'g', linewidth=2)
In []: plot(x, x*sin(x), 'r', 
            linewidth=3)
\end{lstlisting}
$\vdots$
\end{frame}

\begin{frame}[fragile]
\frametitle{Review Problem \ldots}
\alert{Legend \& Annotation\ldots}
\begin{lstlisting}
In []: legend(['x', '-x', 'sin(x)', 
               'xsin(x)'])
In []: annotate('origin', xy = (0, 0))
\end{lstlisting}
\alert{Setting Axes limits\ldots}
\begin{lstlisting}
In []: xlim(-5*pi, 5*pi)
In []: ylim(-5*pi, 5*pi)
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]
\frametitle{Command History}
Use the \typ{\%hist} \alert{magic} command of IPython 
\typ{In []: \%hist}\\
This displays all the commands typed in so far aka Command History.
\begin{block}{Careful about errors!}
  \kwrd{\%hist} will contain the errors as well.\\
\end{block}
\begin{block}{Magic Commands?}
  Magic commands are commands provided by IPython to make our life easier.
\end{block}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Saving commands into script}
Use the \typ{\%save} \alert{magic} command of IPython
\begin{block}{}
\typ{\%save script_name line_numbers}
\end{block}
Line numbers can be specified individually separated by spaces or as a range separated by a dash.\\
\begin{block}{}
\typ{\%save four_plot.py} \alert{\typ{  16-18 21 25 27-32}} \\  
\end{block}
This saves from the history the commands entered on line numbers \alert{16, 17, 18, 21, 25, 27, 28, 29, 30, 31, 32}
\end{frame}

\begin{frame}
\frametitle{Python Scripts\ldots}
Now, four\_plot.py is called a Python Script.
 \begin{itemize}
 \item run the script in IPython using \typ{\%run four_plot.py}\\
 \end{itemize}
\pause
\alert{\typ{NameError: name 'linspace' is not defined}}
\begin{block}{}
To avoid this, run using \alert{\typ{\%run -i four_plot.py}}\\
\end{block}
\end{frame}

\begin{frame}[fragile]
\frametitle{Doing this in Sage\ldots}
 \begin{itemize}
 \item Change the language to =Python= 
 \item Make a simple plot and save it
   \begin{lstlisting}
     from pylab import *
     x = linspace(0, 2*pi, 50)
     plot(x, sin(x))
     savefig('sample-sin.png')
   \end{lstlisting}
 \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{What did we learn?}
  \begin{itemize}
    \item Starting up IPython
    \item Creating simple plots
    \item Adding labels and legends
    \item Annotating plots
    \item Changing the looks: size, linewidth
    \item Accessing history, documentation
    \item \kwrd{\%hist} - History of commands
    \item \kwrd{\%save} - Saving commands 
    \item Running a script using \kwrd{\%run -i}
    \item Using \lstinline|pylab| in Sage
  \end{itemize}
\end{frame}

\end{document}

%% Questions for Quiz %%
%% ------------------ %%

\begin{frame}[fragile]
\frametitle{\incqno }
Draw (roughly) the plot obtained by the following:
\begin{lstlisting}
In []: x = linspace(0, pi, 3)
In []: plot(x, sin(x))
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]
\frametitle{\incqno }
Describe the plot produced by the following:
\begin{lstlisting}
In []: x = linspace(0, 2*pi, 50)
In []: plot(x, cos(x), 'go')
\end{lstlisting}
\end{frame}

\begin{frame}
\frametitle{\incqno }
How will you plot the previous graph with line width set to 3?  How will
you set the $x$ and $y$ labels of the plot?
\end{frame}

\begin{frame}
\frametitle{\incqno }
How will you set the x and y axis limits so that the region of interest
is in the rectangle $(0, -1.5)$ (left bottom coordinate) and $(2\pi,
1.5)$ (right top coordinate)?
\end{frame}

\begin{frame}
\frametitle{\incqno }
What ipython magic command do you use to obtain the lines of code you have already typed in the interpreter? What command do you use to save them?
\end{frame}

\begin{frame}[fragile]
\frametitle{\incqno }
The following code snippet has an error/bug:
\begin{lstlisting}
In []: y = linspace(0, 2*pi, 50)
In []: plot(y, sin(y))
In []: clf()
In []: plot(y, cos(y))
In []: legend(['sin(y)', 'cos(y)']) 
\end{lstlisting}
What is the error? How do you fix it?  
\end{frame}