## Sunday, December 30, 2012

### Pstricks custom graphic objects

Pstricks contains a large number of graphics object, but sometimes they are not enough, and you need something very special. This can be realized using command "\pscustom[prameters]{commands}".

Consider this problem. We would like to draw a ribbon like this:
Of course, properly using the line, polygon or curve commands, we can draw it. But I would say "\pscustom" will make the task very simple. Carefully examine the graph, we find that it is something enclosed by two sine curve. So can we draw such a graph object by simply plotting two sine curve? Let us have a try.

\documentclass{article}
\usepackage{pstricks}
\usepackage{pst-plot}
\begin{document}
\begin{pspicture}*(-1,-1.5)(7,1.5)
\psgrid
\psset{xunit=0.015cm}
\psplot{0}{360}{x sin 0.25 sub}
\psline(360,0.25)(360,-0.25)
\psline(0,-0.25)(0,0.25)
\end{pspicture}
\end{document}


 Fig.1 Custom graphic objects --- preparation

We have successfully draw two sine curves and two lines to join them togethre. The problem is how to fill the area enclosed by the two curve. This is where "\pscustom" steps in. Try the following codes (which is very simillar to the upper ones, except that the lines are enclosed in "\pscustom" command and fill parameters is set.)

\documentclass{article}
\usepackage{pstricks}
\usepackage{pst-plot}
\begin{document}
\begin{pspicture}*(-1,-1.5)(7,1.5)
\psset{xunit=0.015cm}
\pscustom[fillstyle=solid,fillcolor=red]
{
\psplot{0}{360}{x sin 0.25 sub}
\psline(360,0.25)(360,-0.25)
\psline(0,-0.25)(0,0.25)
}
\end{pspicture}
\end{document}


 Fig.2 Custom graphic objects --- ribbon

And you get a graph just like what you asked to draw. Now we have successfully creat the ribbon object. You may have a try by using line or curve command to finish the same task, and compare which method is simpler.

"Practice makes perfect", one more example will be shown.

\documentclass{article}
\usepackage{pstricks}
\usepackage{pst-plot}
\begin{document}
\begin{pspicture}*(-3.5,-3.5)(3.5,3.5)
\pscustom[fillstyle=solid,fillcolor=red,
linestyle=none]
{
\psplot{-1.414}{1.414}{2 x 2 exp sub}
}
\psset{linewidth=2pt,linecolor=blue}
\psplot{-3}{3}{2 x 2 exp sub}
\psset{linecolor=black}
\psaxes{->}(0,0)(-3.5,-3.5)(3.5,3.5)
\end{pspicture}
\end{document}


 Fig.3 Custom graphic objects --- filled curves

## Friday, November 30, 2012

### Deal with repetitive work in pstricks efficiently (2) --- multido

Last time we talked about doing repetitive work in postricks using command "\multirput", and this time "\multido" will be introduced. "\multido" is a much more general loop macro than "\multirput". You can use it like this "\multido {\loop_indication = start_value + increment} {loop_nums} {loop_content}", very simillar to loop in programming language. Some examples are shown below.

\documentclass{article}
\usepackage{multido}
\usepackage{pstricks}

\begin{document}
\begin{pspicture}*(-0.5,0.5)(5.5,5.5)
\multido{\ix=0+1}{6}
{
\multido{\iy=0+1}{6}
{
\rput(\ix,\iy){(\ix,\iy)}
}
}
\end{pspicture}
\end{document}


 Fig.1 Deal with repetitive work in efficiently (2) --- multido

\documentclass{article}
\usepackage{multido}
\usepackage{pstricks}

\begin{document}
\begin{pspicture}(2,2)
\pscircle*[linecolor=yellow](1,1){0.707}
\psset{linecolor=red}
\multido{\ix=0+15}{24}
{
\rput{\ix}(1,1){\psline(0.5,0.5)(1,1)}
}
\end{pspicture}
\end{document}

 Fig.2 Deal with repetitive work in efficiently (2) --- multido

## Wednesday, October 31, 2012

### Deal with repetitive work in pstricks efficiently (1) --- multirput

Computer makes the repetitive work simple. And in pstricks command "\multirput" and "\multido" is designed to deal with the repetitive work.
This time we will talk about command "\multirput", and in the next post "\multido" will also be talked.

"\multirput" as its literal meaning, archive the utility of multi "\rput" commands. The complete form of this command is "\multirput [refpoint] {rotation} (x0,y0) (dx,dy) {nums} {stuff}". The argument "refpoint", "rotation" and "stuff" have the same meaning as the corresponding arguments in command "\rput". (x0,y0) is the starting rput position and (dx,dy) is the increasement, and "nums" is the repetation times. In the following example we use this command to create a simple geometry pattern.

\documentclass{article}
\usepackage{pst-plot}
\usepackage{pstricks}
\begin{document}
\begin{pspicture}(0,0)(8,5)
%horizontal loop
\multirput[bl](0,0)(1,0){5}
{
%vertical loop
\multirput[bl](0,0)(0.5,0.866){5}
{
\psline(0,0)(1,0)(0.5,0.866)(0,0)
%Draw a equilateral triangle
}
}
\psline(2.5,4.33)(7.5,4.33) %top line
\psline(7.5,4.33)(5,0) %right line
\end{pspicture}
\end{document}


 Fig.1 Deal with repetitive work in efficiently (1) --- multirput

## Wednesday, September 12, 2012

### rput --- a most offen used pstricks command

"rput" is a most offen used pstricks command. It gives you the ability to place and rotate whatever you want. We have used this command before, and this time we come to examine it carefully.
The common useage of this command is "\rput[refpoint]{rotation}(x,y){stuff}".
"refpoints" determines the reference point of stuff. It take value of the combination of "t,b,B"(for vertical refpoint, means "top","bottom" and "Baseline" respectively) and "l,r"(for horizontal refpoint, means "left" and "right" respectively).

"rotation" is the angle "stuff" will be rotated. "(x,y)" is the position where "stuff" will be placed. And "stuff" is what you want to place at position (x,y), for example, some words, some pstricks element and so on. Note that the coordinates appear in "stuff" are coordinates relative to (x,y).

In the following example the usage of this command is shown practically.

\documentclass{article}
\usepackage{pst-plot}
\usepackage{pstricks}
\begin{document}
\begin{pspicture}(0,0)(5,5)
\psgrid[gridcolor=gray,
subgridcolor=lightgray](0,0)(5,5)
\rput[bl](0,1){bottom left (0,1)}
\rput[tr](5,1){top right (5,1)}
\rput[Bl](0,2){Baseline left (0,2)}
\rput{45}(1,4){rotate $45^{\circ}$}
\rput{45}(3.5,3.5)
{
\psframe[linecolor=red](-1,-1)(1,1)
}
\end{pspicture}
\end{document}


 Fig.1 rput --- a most offen used pstricks command

## Thursday, July 5, 2012

### Pie Chart --- Optional arguments of "\psChart"

Now we come to examine the optional arguments of command "\psChart". The following table lists the special options belong to "\psChart".

 name description default value chartSep distance from the pie chart center to an outraged pie piece 10pt chartColor gray or color gray usercolor a comma separated list of user defined colors for the pie pieces encloed with { } { } chartNodeI the position of the inner node, relative to the radius 0.75 chartNodeO the position of the outer node, relative to the radius 1.5

With these arguments we can plot a outstanding pie chart.

\documentclass{article}
\usepackage{pstricks}
\usepackage{pst-plot}
\begin{document}
\begin{figure}
\centering
\begin{pspicture}(-5,-5)(8,5)
%Pie chart
\psChart[chartSep=15pt,chartColor=color,
{3}{4.75}
%The Label for the outraged piece
\ncline[linecolor=-chartFillColor3]
{psChartI3}{psChartO3}
\uput[l](psChartO3){\textcolor{chartFillColor3}
{\large The Most}
}
%The legends
\psframe[fillcolor=chartFillColor1,fillstyle=solid]
(5.25,-5)(6.5,-4.5)
\uput[r](6.5,-4.75){Traffic}
\psframe[fillcolor=chartFillColor2,fillstyle=solid]
(5.25,-4)(6.5,-3.5)
\uput[r](6.5,-3.75){Clothes}
\psframe[fillcolor=chartFillColor3,fillstyle=solid]
(5.25,-3)(6.5,-2.5)
\uput[r](6.5,-2.75){Food}
\psframe[fillcolor=chartFillColor4,fillstyle=solid]
(5.25,-2)(6.5,-1.5)
\uput[r](6.5,-1.75){Rent}
\psframe[fillcolor=chartFillColor5,fillstyle=solid]
(5.25,-1)(6.5,-0.5)
\uput[r](6.5,-0.75){Others}
\end{pspicture}
\end{document}


 Fig.1 An advanced practical example of pie chart plotting

## Saturday, June 9, 2012

### Pie Chart --- three useful nodes defined by command "\psChart"

The macro \psChart defines for every value three nodes at the half angle and in distances from chartNodeI (default 0.75), 1 and chartNodeO(default 1.25) times of the radius from the origin (chartNodeI and chartNodeO will be discussed in the next post). The nodes are named as psChartInum, psChartnum and psChartOnum, where num is the number of the pie pieces (num have a value between 1 to the numbers of pie pieces, Letter I stands for Inner and O stands for Outer). These nodes will be very usefull when you add labels to the pie pieces. The following shows these nodes visually.

\documentclass{article}
\usepackage{pstricks}
\usepackage{pst-plot}
\begin{document}
\begin{pspicture}(-5,-5)(5,5)
\psChart{2,2,3,2}{}{3}
\psdot[linecolor=red](psChart2)
\uput[r](psChart2){\textcolor{red}{psChart2}}
\psdot[linecolor=green](psChartI2)
\uput[r](psChartI2){\textcolor{green}{psChartI2}}
\psdot[linecolor=blue](psChartO2)
\uput[r](psChartO2){\textcolor{blue}{psChartO2}}
\psdot[linecolor=red](psChart3)
\uput[r](psChart3){\textcolor{red}{psChart3}}
\psdot[linecolor=green](psChartI3)
\uput[r](psChartI3){\textcolor{green}{psChartI3}}
\psdot[linecolor=blue](psChartO3)
\uput[r](psChartO3){\textcolor{blue}{psChartO3}}
\end{pspicture}
\end{document}


 Fig.1 Three useful nodes defined by command \psChart.

Now a practical example of plotting a pie chart will be presented.

\documentclass{article}
\usepackage{pstricks}
\usepackage{pst-plot}
\begin{document}
\begin{pspicture}(-5,-5)(5,5)
\psChart{5,4,4,3,3}{}{3}
\rput(psChartI1){\textcolor{red}{5}}
\rput(psChartI2){\textcolor{red}{4}}
\rput(psChartI3){\textcolor{red}{4}}
\rput(psChartI4){\textcolor{red}{3}}
\rput(psChartI5){\textcolor{red}{3}}
\psset{nodesepA=5pt,nodesepB=-10pt}
\rput(psChartO1){{US}}
\rput(psChartO2){{EU}}
\rput(psChartO3){{China}}
\rput(psChartO4){{Japan}}
\rput(psChartO5){{Others}}
\end{pspicture}
\end{document}


 Fig.2 A practical example of pie chart plotting.

In this example, we put the labels using the nodes which have been defined by "\psChart".

## Sunday, June 3, 2012

### Pie chart --- the simplest use of command "\psChart"

Command "\psChart" in package pstricks-add makes plot a pie chart very simple. The syntax of this command is "\psChart[options]{values1}{values2}{radius}". "values1" is the list of date to be plotted. "vaules2" is a list of outraged pieces. For example, if you want the 1st and 5-th sector to be outraged, you can specify this parameter as "{1,5}". "radius" is the radius of the pie chart. The color used to paint the num-th pie piece is named internally as "chartFillColornum".

Now let us have a try of this command.

  \begin{pspicture}(-5,-5)(8,5)
%Pie chart
\psChart{1,2,2,3,1,4}{1,5}{4.75}
%The legends
\psframe[fillcolor=chartFillColor1,
fillstyle=solid](5.25,-5)(6.5,-4.5)
\uput[r](6.5,-4.75){Pie 1}
\psframe[fillcolor=chartFillColor2,
fillstyle=solid](5.25,-4)(6.5,-3.5)
\uput[r](6.5,-3.75){Pie 2}
\psframe[fillcolor=chartFillColor3,
fillstyle=solid](5.25,-3)(6.5,-2.5)
\uput[r](6.5,-2.75){Pie 3}
\psframe[fillcolor=chartFillColor4,
fillstyle=solid](5.25,-2)(6.5,-1.5)
\uput[r](6.5,-1.75){Pie 4}
\psframe[fillcolor=chartFillColor5,
fillstyle=solid](5.25,-1)(6.5,-0.5)
\uput[r](6.5,-0.75){Pie 5}
\psframe[fillcolor=chartFillColor6,
fillstyle=solid](5.25,0)(6.5,0.5)
\uput[r](6.5,0.25){Pie 6}
\end{pspicture}


 Fig.1 Pie chart plots in Pstricks

In the upper example, we see that a pie chart with radius "5" is plotted accroding to data "{1,2,2,3,1,4}", and the 1-st and 5-th pie pieces is outraged. This is exactly what we expected. And with the help of variable "chartFillColornum" we produced the legends.