%%====================================
%% This is help file for pst-2dplot
%% Farshid Delgosha
%% 12/23/2008
%%====================================

\documentclass[10pt]{article}

\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[cmex10]{amsmath}
\usepackage[table]{xcolor}
\usepackage{xspace}
\usepackage{array}
\usepackage[bf,labelsep=period]{caption}
\usepackage[margin=1in,dvips,includemp,reversemp,marginparwidth=.85in,marginparsep=0in]{geometry}
\usepackage{pst-2dplot}
\usepackage{pst-node}
\usepackage{showexpl}
\lstset{explpreset={numbers=left,numberstyle=\tiny,numbersep=.5em},width=6cm,%
basicstyle=\ttfamily\footnotesize,rframe=,frame=single,backgroundcolor=\color{orange!30}}

\setlength{\parskip}{.5\baselineskip}

%%=== new macros ====================================================
\def\package{\texttt{pst-2dplot}\xspace}
\def\CMD#1{{\ttfamily\textbackslash #1}}
\def\xyCoor#1{\texttt{($x_{#1}$,$y_{#1}$)}}
\def\margintext#1{\marginpar{\texttt{\small#1}}}
%
\newenvironment{syntax}{%
\begin{tabbing}%
\hspace{2cm}\=\hspace{1cm}\=\hspace{1cm}\=\kill%
}
{\end{tabbing}}
%
\def\xdashline(#1,#2)#3#4{%
\psset{linecolor=#3}%
\psline[linestyle=dashed](0,-#2)(#1,-#2)%
\rput(#1,0){\psline[arrows=|<-](0,0)(0,.5)}%
\rput(#1,-#2){\psline[arrows=|<-](0,0)(0,-.5)}%
\rput[l]{90}(#1,.65){\textcolor{#3}{\texttt{#4}}}%
}
%
\def\ydashline(#1,#2)#3#4{%
\psset{linecolor=#3}%
\psline[linestyle=dashed](-#1,0)(-#1,#2)%
\rput(0,#2){\psline[arrows=|<-](0,0)(.5,0)}%
\rput(-#1,#2){\psline[arrows=|<-](0,0)(-.5,0)}%
\rput[l](.65,#2){\textcolor{#3}{\texttt{#4}}}%
}
%%===================================================================



%%=== data files ====================================================
\begin{filecontents*}{data1.dat}
[0.0]   [0.0]
[0.1]   [0.1]
[0.2]   [0.1]
[0.3]   [0.2]
[0.4]   [0.2]
[0.5]   [0.4]
[0.6]   [0.5]
[0.7]   [0.8]
[0.8]   [0.9]
[0.9]   [1.0]
[1.0]   [0.2]
\end{filecontents*}

\begin{filecontents*}{data2.dat}
[0.0]   [0.8]
[0.1]   [0.9]
[0.2]   [1.0]
[0.3]   [0.8]
[0.4]   [0.7]
[0.5]   [0.5]
[0.6]   [0.3]
[0.7]   [0.2]
[0.8]   [0.1]
[0.9]   [0.2]
[1.0]   [0.3]
\end{filecontents*}

\begin{filecontents*}{data3.dat}
[0.0]   [1.0000000]
[0.1]   [0.6909830]
[0.2]   [0.4122150]
[0.3]   [0.1909830]
[0.4]   [0.0489435]
[0.5]   [0.0000000]
[0.6]   [0.0489435]
[0.7]   [0.1909830]
[0.8]   [0.4122150]
[0.9]   [0.6909830]
[1.0]   [1.0000000]
[1.1]   [1.3090200]
[1.2]   [1.5877900]
[1.3]   [1.8090200]
[1.4]   [1.9510600]
[1.5]   [2.0000000]
[1.6]   [1.9510600]
[1.7]   [1.8090200]
[1.8]   [1.5877900]
[1.9]   [1.3090200]
[2.0]   [1.0000000]
\end{filecontents*}
%%===================================================================




\title{The \package Package \\ {\large (version 1.5)}}
\author{Farshid Delgosha \\ \texttt{fdelgosha@gmail.com}}
\date{26 December, 2008}




\begin{document}

\maketitle




\section{Introduction}

This document introduces the package \package that is an easy-to-use and intuitive tool for drawing two-dimensional plots in \LaTeX{} documents. The main environment introduced by \package is \texttt{pstgraph} that draws grid lines, tag numbers, and labels on both axes. I have to mention that there are more features that I am planning to add. Nevertheless, I felt that the current version is still useful.

To use this package, add the following command to the preamble of your document.
\begin{syntax}
\>\CMD{usepackage\{pst-2dplot\}}
\end{syntax}

The syntax of the \texttt{pstgreaph} \margintext{pstgraph} environment is as follows.
\begin{syntax}
\>\CMD{begin\{pstgraph\}[\textrm{\textit{key}=\textit{value}}]\xyCoor{0}} \\
\>\>$\vdots$ \\
\>\CMD{end\{pstgraph\}}
\end{syntax}
As depicted in Figure~\ref{fig:pstgraph}, the \texttt{pstgraph} environment draws a box of side lengths $x_0$ and $y_0$.
%%===============================================================================
\begin{figure}[ht!]
\centering
\psset{xunit=1.25cm,yunit=8mm}
\begin{pspicture}[showgrid=false](-2,-2)(5.5,6)
%
\multido{\nx=0+1,\rl=0+.25}{5}{%
\rput(\nx,0){\psline[linecolor=gray](0,-.25)(0,4)}%
\rput[t](\nx,-.75){$\rl$}}
%
\multido{\ny=0+1,\rl=0+.25}{5}{%
\rput(0,\ny){\psline[linecolor=gray](-.25,0)(4,0)}%
\rput[r](-.75,\ny){$\rl$}}
%
\psframe(0,0)(4,4)
%
\rput[t](2,-1.65){\textit{x label}}
\rput[b]{90}(-1.75,2){\textit{y label}}
%
\dotnode[linecolor=red](0,0){org}
\dotnode[linecolor=red](4,4){xy0}
\nput{225}{org}{\textcolor{red}{$(0,0)$}}
\nput{45}{xy0}{\textcolor{red}{$(x_0,y_0)$}}
%
\psset{linewidth=.6pt,arrowinset=.25,arrowsize=.125}
\xdashline(4.35,.25){blue}{xticksize}
\xdashline(4.7,.75){orange}{xtagsep}
\xdashline(5.05,1.65){teal}{xlabelsep}
%
\ydashline(.25,4.4){blue}{yticksize}
\ydashline(.75,5){orange}{ytagsep}
\ydashline(1.75,5.6){teal}{ylabelsep}
%
\psset{linecolor=red,linestyle=dashed,arrows=<->}
\psline(0,1.5)(4,1.5)
\rput*(1.5,1.5){\textcolor{red}{$x_0$}}
\psline(2.5,0)(2.5,4)
\rput*(2.5,2.5){\textcolor{red}{$y_0$}}
%
\end{pspicture}
%
\caption{\texttt{pstgraph} environment}
\label{fig:pstgraph}
\end{figure}
%%===============================================================================
The coordinates of the lower left corner and upper right corner of the box are $(0,0)$ and $(x_0,y_0)$, respectively. Keys of the \texttt{pstgraph} environment can be set either directly or through the \CMD{setpstgraph} \margintext{setpstgraph} macro with the following syntax.
\begin{syntax}
\>\CMD{setpstgraph\{\textrm{$key_1$=$value_1,key_2$=$value_2, \dotsc$}\}}
\end{syntax}
This macro must be used outside the \texttt{pstgraph} environment for the keys to take effect. The keys defined by the \texttt{pstgraph} environment are summarized in Table~\ref{tab:keys}.

%%===============================================================================
\rowcolors{1}{}{gray!30}
\begin{table}[b!]
\centering
\caption{\texttt{pstgraph} keys}
\label{tab:keys}
\begin{tabular}{>{\ttfamily}l  >{\itshape}c  c  p{2.6in}}
\hline
\textit{Key}  &  \textit{Value}  &  \textit{Default}  &  \textit{Description} \\
\hline
xmin        &  num     &  $0$                &  Minimum data value on the $x$ axis \\
xmax        &  num     &  $1$                &  Maximum data value on the $x$ axis \\
ymin        &  num     &  $0$                &  Minimum data value on the $y$ axis \\
ymax        &  num     &  $1$                &  Maximum data value on the $y$ axis \\
xgriddiv    &  num     &  $1$                &  Number of vertical grid lines \\
ygriddiv    &  num     &  $1$                &  Number of horizontal grid lines \\
gridstyle   &  style   &  solid              &  Style of grid lines \\
gridcolor   &  color   &  gray               &  Color of grid lines \\
gridwidth   &  dimen   &  0.5pt              &  Width of grid lines \\
xticksize   &  num     &  $0.1$              &  Length of vertical tick lines \\
yticksize   &  num     &  $0.1$              &  Length of horizontal tick lines \\
xtagsep     &  num     &  $0.2$              &  Distance of horizontal tags from the $x$ axis \\
ytagsep     &  num     &  $0.2$              &  Distance of the vertical tags from the $y$ axis \\
xtagformat  &  format  &  \CMD{scriptstyle}  &  Format of horizontal tags \\
ytagformat  &  format  &  \CMD{scriptstyle}  &  Format of vertical tags \\
xlabel      &  text    &  $-$                &  Label of the $x$ axis \\
ylabel      &  text    &  $-$                &  Label of the $y$ axis \\
xlabelsep   &  num     &  $0.55$             &  Distance of the $x$ label from the $x$ axis \\
ylabelsep   &  num     &  $0.75$             &  Distance of the $y$ label from the $y$ axis \\
framewidth  &  dimen   &  1pt                &  Width of the frame \\
framecolor  &  color   &  black              &  Color of the frame \\
\hline
\end{tabular}
\end{table}
\rowcolors{1}{}{}
%%===============================================================================
The labels of the $x$ and $y$ axes can be set either directly or through the \CMD{pstlabel} \margintext{pstlabel} macro, which has the following syntax.
\begin{syntax}
\>\CMD{pstlabel}\{\textit{x-label}\}\{\textit{y-label}\}
\end{syntax}
This macro can be used either inside or outside the \texttt{pstgraph} environment.

The last macro defined by the \package is \CMD{pstfileplot} \margintext{pstfileplot} that is used to draw the data in the file \textit{data-file}. The syntax of this macro is as follows.
\begin{syntax}
\>\CMD{pstfileplot[\textrm{\textit{key}=\textit{value}}]\{{\rmfamily\itshape data-file}\}}
\end{syntax}
Assuming $(x_0,y_0), (x_1,y_1), (x_2,y_2), \dotsc$ are the points on a curve to be plotted, the data file \textit{data-file} must have the following format.
\[
\begin{array}{cc}
{[x_0]}   &  {[y_0]} \\
{[x_1]}   &  {[y_1]} \\
{[x_2]}   &  {[y_2]} \\
\vdots    &  \vdots
\end{array}
\]
The use of brackets around every data value is optional; however, its usage enhances reading the data from the file. The plotted curve is obtained by connecting every point $(x_i, y_i)$ to $(x_{i+1}, y_{i+1})$ by a straight line segment for all $i = 0, 1, 2, \dotsc$. \emph{It is important to notice that all data values in the data file must be nonnegative; otherwise, unexpected results will occur.} Assume $x_{min} \leq x_i \leq x_{max}$ and $y_{min} \leq y_i \leq y_{max}$ for all $i = 0, 1, 2, \dotsc$. If either $x_{min} < 0$ or $y_{min} < 0$, I suggest the following solution. Generate the data file as follows.
\[
\begin{array}{cc}
{[x_0 - x_{min}]}  &  {[y_0 - y_{min}]} \\
{[x_1 - x_{min}]}  &  {[y_1 - y_{min}]} \\
{[x_2 - x_{min}]}  &  {[y_2 - y_{min}]} \\
\vdots  &  \vdots
\end{array}
\]
Then, set \texttt{xmin}=$x_{min}$, \texttt{xmax}=$x_{max}$, \texttt{ymin}=$y_{min}$, and \texttt{ymax}=$y_{max}$. This solution works because the portions of \texttt{pstgraph} and \CMD{pstfileplot} codes responsible for scaling and drawing the curve depend only on the differences $\mathtt{xmax} - \mathtt{xmin}$ and $\mathtt{ymax} - \mathtt{ymin}$. This solution is, in fact, equivalent to moving the origin of the $xy$-plane to the point $(x_{min}, y_{min})$. I am working on automating this process.




\section{Examples}

In this section, we review some examples.

\begin{LTXexample}
\begin{pstgraph}(4,3)
  \psset{linewidth=1.5pt}
  \pstfileplot[linecolor=purple]{data1.dat}
  \pstfileplot[linecolor=teal]{data2.dat}
\end{pstgraph}
\end{LTXexample}


\begin{LTXexample}
\setpstgraph{gridstyle=dashed,%
gridwidth=.2pt,framecolor=orange!60!black}
\begin{pstgraph}[xgriddiv=4,ygriddiv=2](4,3)
  \psset{linewidth=1.5pt}
  \pstfileplot[linecolor=purple]{data1.dat}
  \pstfileplot[linecolor=teal]{data2.dat}
  \pstlabel{$x$ axis}{$y$ axis}
\end{pstgraph}
\end{LTXexample}

Now, assume we would like to plot the curve of $f(x) = \sin(\pi x)$ from $x = -1$ to $x = 1$. First, we generate a data file containing the points of the curve $y = \sin(\pi(x - 1)) + 1$ in which $x$ varies from $0$ to $2$. Notice that the coordinates of all points are nonnegative. Assuming the data file is \texttt{data3.dat}, we plot the curve as follows.
\begin{LTXexample}
\setpstgraph{xmin=-1,xmax=1,ymin=-1,ymax=1,%
xgriddiv=4,ygriddiv=2}
\begin{pstgraph}(4,3)
  \psset{linewidth=1.5pt}
  \pstfileplot[linecolor=purple]{data3.dat}
  \pstlabel{$x$}{$\sin(\pi x)$}
\end{pstgraph}
\end{LTXexample}


\end{document} 