## Creating a graph with PDL

I will explain how to create a graph using PDL.

### Install PDL::Graphics::PLplot

Install the module ** PDL::Graphics::PLplot ** to draw the graph. (You need to PDL installed first.)

#### Windows

To install in ppm, execute the following command.

ppm install http://www.sisyphusion.tk/ppm/PDL-Graphics-PLplot.ppd - force

Press Enter to complete the installation. Since it is necessary to set the environment variable, set the displayed environment variable PLPLOT_LIB. For example, the following is displayed.

In order to utilise the built in plplot capability set your PLPLOT_LIB environment variable to C:\Perl\site\lib\PDL\plplot_supp

Versions that support png

It is convenient if png output is supported, so if you want to install a version that supports png, run the following command.

ppm install http://www.sisyphusion.tk/ppm_alt/PDL-Graphics-PLplot_alt.ppd - force

Press Enter to complete the installation. Since it is necessary to set the environment variable, set the displayed environment variable PLPLOT_LIB and PLPLOT_DRV_DIR. For example, the following is displayed.

Running PDL-Graphics-PLplot-0.62 install script ... In order to utilise the built in plplot capability set your PLPLOT_LIB environment variable to: C:\Perl64\site\lib\PDL\plplot_supp And set your PLPLOT_DRV_DIR environment variable to: C:\Perl64\site\bin

### Creating a simple graph

Let's draw a graph in PDL. Use the module ** PDL::Graphics::PLplot ** to draw the graph.

#### Linear function graph

First, let's draw a graph of the simplest linear function "y = 2x". Use the ** xyplot ** method to create a xy graph.

use PDL; use PDL::Graphics::PLplot; # Create PLPlot object (output as graph.png in PNG format) my $pl = PDL::Graphics::PLplot->new(DEV =>'png', FILE =>'graph.png'); # Create a PDL variable that represents 0 to 99 as the value of x my $x = pdl->sequence(100); # y = 2x my $y = 2 * $x; # Create a graph $pl->xyplot($x, $y); # Close $pl->close;

You can create a graph of the linear function as follows.

[f: id: perlcodeexample: 20131106082618p: image: w500]

#### new options

Here are some graph options. It can be passed as an argument to the new method.

my $pl = PDL::Graphics::PLplot->new( DEV =>'png', FILE =>'graph.png', PAGESIZE => [500, 400] );

** Graph size **

You can specify the size of the graph to be output with ** PAGESIZE **.

PAGESIZE => [500, 400]

#### Options for drawing graphs

This option is specified when drawing the graph.

$pl->xyplot($x, $y, XLAB =>'x', YLAB =>'y');

** x-axis label **

You can specify the x-axis label in ** XLAB **.

XLAB =>'x'

** y-axis label **

You can specify the y-axis label in ** YLAB **.

YLAB =>'y'

** Drawing area **

You can specify the drawing area with the ** BOX ** option.

BOX => [start of x, end of x, start of y, end of y]

Specify as follows.

BOX => [0, 150, 0, 300]

** x-axis scale label width **

You can specify the width of the x-axis tick label with ** XTICK **.

XTICK => 10

** y-axis scale label width **

You can specify the width of the y-axis tick label with ** YTICK **.

YTICK => 10

** Title **

You can specify the title of the graph with ** TITLE **.

TITLE =>'y = 2x'

** Viewport **

You can specify where to actually draw the graph with ** VIEWPORT **. Specify in a ratio of 0 to 1.

VIEWPORT => [Minimum value position of x, Maximum value position of x, Minimum value position of y, Maximum value position of y]

Specify as follows.

VIEWPORT => [0.1, 0.5, 0.1, 0.5]

** Draw x-axis **

Specify ** bcnsta ** for ** XBOX ** to draw the x-axis. This value defaults to ** bcnst ** and you can add ** a ** to draw the x-axis.

XBOX =>'bcnsta',

** Draw x-axis **

Specify ** bcnsta ** for ** YBOX ** to draw the y-axis. This value defaults to ** bcnst ** and you can add ** a ** to draw the y-axis.

YBOX =>'bcnsta',

** Graph color **

You can specify the color of the graph with ** COLOR **.

COLOR =>'RED'

Below are the types of colors.

BLACK GREEN WHEAT BLUE RED AQUAMARINE GRAY BLUE VIOLET YELLOW PINK BROWN CYAN TURQUOISE MAGENTA SALMON WHITE ROYALBLUE DEEPSKYBLUE VIOLET STEELBLUE1 DEEPPINK MAGENTA DARKORCHID1 PALEVIOLETRED2 TURQUOISE1 LIGHTSEAGREEN SKYBLUE FORESTGREEN CHARTREUSE3 GOLD2 SIENNA1 CORAL HOTPINK LIGHTCORAL LIGHTPINK1 LIGHTGOLDENROD

#### Example

I wrote a graph of a linear function "y = 1/2 x + 10".

[f: id: perlcodeexample: 20131106082619p: image: w500]

use PDL; use PDL::Graphics::PLplot; # Create PLPlot object (output as graph.png in PNG format) my $pl = PDL::Graphics::PLplot->new( DEV =>'png', FILE =>'graph.png', PAGESIZE => [600, 300], ); # Create a PDL variable that represents 0 to 99 as the value of x my $x = pdl->sequence(100)- 50; # y = 2x my $y = (1/2) * $x + 10; # Create a graph $pl->xyplot( $x, $y, XLAB =>'x', YLAB =>'y', TITLE =>'y = 1/2 x + 10', XBOX =>'bcnsta', YBOX =>'bcnsta', COLOR =>'RED', JUST => 1 ); # Close $pl->close;

### Graph of n - th order function

Now let's draw a cubic function. It's interesting to know immediately what kind of shape it is.

[f: id: perlcodeexample: 20131106102521p: image: w500]

use strict; use warnings; use PDL; use PDL::Graphics::PLplot; # Create PLPlot object my $pl = PDL::Graphics::PLplot->new(DEV =>'png', FILE =>'graph.png'); # x value (0 to 4 in 0.1 increments) my $x = pdl->sequence(40) * 0.1; # y = x ^ 3 - 6x ^ 2 + 11x -6 my $y = ($x ** 3) -6 * ($x ** 2) + (11 * $x) -6; # Create a graph $pl->xyplot($x, $y); # Close $pl->close;

### Trigonometric function

The following is a graph of trigonometric functions (sin). Use the ** sin ** method to calculate trigonometric functions. It is defined in PDL::Math.

[f: id: perlcodeexample: 20131106102522p: image: w500]

use strict; use warnings; use PDL; use PDL::Graphics::PLplot; # Create PLPlot object my $pl = PDL::Graphics::PLplot->new(DEV =>'png', FILE =>'graph.png'); # x value my $x = pdl->sequence(200) * 0.1; # y = sin(x) my $y = $x->sin; # Create a graph $pl->xyplot($x, $y); # Close $pl->close;

### Exponential function

Next is the graph of the exponential function. Note that the value e to be calculated is created as a PDL variable.

[f: id: perlcodeexample: 20131106102523p: image: w500]

use strict; use warnings; use PDL; use PDL::Graphics::PLplot; # Create PLPlot object my $pl = PDL::Graphics::PLplot->new(DEV =>'png', FILE =>'graph.png'); # e my $e = pdl [exp(1)]; # x value my $x = pdl->sequence(60) * 0.1 - 3; # y = e ^ x my $y = $e ** $x; # Create a graph $pl->xyplot($x, $y); # Close $pl->close;

### Logarithmic function (natural logarithm)

The last is a graph of logarithmic function (natural logarithm). Use the ** log ** method to calculate the logarithmic function (natural logarithm). It is defined in PDL::Math. Note that the graph starts at 0.1, as the value of log0 will be infinitesimal.

[f: id: perlcodeexample: 20131106102524p: image: w500]

use strict; use warnings; use PDL; use PDL::Graphics::PLplot; # Create PLPlot object my $pl = PDL::Graphics::PLplot->new(DEV =>'png', FILE =>'graph.png'); # x value my $x = pdl->sequence(100) * 0.1 + 0.1; # y = log(x) my $y = $x->log; # Create a graph $pl->xyplot($x, $y); # Close $pl->close;

### Strip plot - graph of one x - axis and multiple y - axis

One x-axis and multiple y-axis graphs are called strip plots and can be drawn using the ** stripplots ** method.

[f: id: perlcodeexample: 20131107113838p: image: w500]

use strict; use warnings; use PDL; use PDL::Graphics::PLplot; # Create PLPlot object my $pl = PDL::Graphics::PLplot->new(DEV =>'png', FILE =>'graph.png'); # data my $x = pdl->sequence(20); my $pi = 4 * atan2 (1,1); my $y1 = $x ** 2; my $y2 = sqrt $x; my $y3 = $x ** 3; my $y4 = sin(($x/20) * 2 * $pi); my $ys = $y1->cat($y2, $y3, $y4); # Strip plot $pl->stripplots( $x, $ys, PLOTTYPE =>'LINE', TITLE =>'functions', YLAB => ['x ** 2', 'sqrt(x)', 'x ** 3', 'sin(x/20 * 2pi)'], COLOR => ['GREEN', 'DEEPSKYBLUE', 'DARKORCHID1', 'DEEPPINK'], XLAB =>'X label' ); $pl->close;