an introduction to plotting in perl using pdl::graphics::plplot

Post on 18-Dec-2014

6.966 Views

Category:

Education

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

This is an introduction to the Perl (PDL) bindings for the PLplot plotting library.

TRANSCRIPT

An Introduction to PDL::Graphics::PLplot

David Mertens

July 7, 2010

Introduction

Introduction

PDL and PLplot

PLplot

PDL Bindings

Alternatives

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

PDL and PLplot

Introduction

PDL and PLplot

PLplot

PDL Bindings

Alternatives

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

The Perl Data Language,making number-crunching aseasy as writing a Perl script.

pdl.perl.org

PLplot, a modern open-sourceplotting library written in C.

plplot.sourceforge.net

PLplot

Introduction

PDL and PLplot

PLplot

PDL Bindings

Alternatives

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

Written in C

Bindings for Lisp, Perl (PDL), Python, OCaml, etc

Strong separation between plotting commands and outputdevices

All plotting commands can be used on all output devices

New devices are relatively easy to write - only require ahandful of commands

Well documented with many examples on their website

Downside: worked very hard on cross-platformcompatibility, but installation is still tricky sometimes

PDL::Graphics::PLplot

Introduction

PDL and PLplot

PLplot

PDL Bindings

Alternatives

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

High-level object-oriented in-terface

Easier

Perlish feel

Only a handful of func-tions

Tweak plots by specifyingoptions

Incomplete

Low-level wrappers of (mostof) the C interface

More powerful

Feels like C

Many functions

Tweak plots by callingtweaking functions

Alternatives

Introduction

PDL and PLplot

PLplot

PDL Bindings

Alternatives

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

Alternatives to using PLplot:

PGPLOT (requires Fortran to compile)

Asymptote, with Perl and PDL bindings (slow)

gnuplot (no PDL interface)

PDL::Graphics::TriD (not publication quality)

Karma ??

... and many others

First Steps

Introduction

First Steps

Loading PLplot

Hello PLplot

Labels and Title

Setting the Device

Plotting Points

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

Loading PLplot

Introduction

First Steps

Loading PLplot

Hello PLplot

Labels and Title

Setting the Device

Plotting Points

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

To load PLplot, just use the bindings module:

1 use strict;

2 use warnings;

3 use PDL;

4 use PDL::Graphics::PLplot;

5

6 # ...

To save myself keystrokes, I will make use of the aliasedmodule, available from CPAN, making these two pairs ofstatements equivalent:

1 use aliased ’PDL::Graphics::PLplot’;

2 my $pl = PLplot->new( ’args...’ );

3

4 # works the same as:5 use PDL::Graphics::PLplot;

6 my $pl = PDL::Graphics::PLplot->new( ’args...’ );

Hello PLplot

new([OPTIONS]) creates a new PLplot objectxyplot($x, $y, [OPTIONS]) plots x vs y dataclose() closes the PLplot object and finalizes the plot

1 use strict; use warnings; use PDL;

2 use PDL::Graphics::PLplot;

3

4 # Generate a time series5 my $time = sequence(100)/10;

6 my $sinewave = 5 * sin($time);

7

8 # Prompts the user for the device9 # and file name:

10 my $pl = PDL::Graphics::PLplot->new;11

12 # Plot the time series13 $pl->xyplot($time, $sinewave);

14

15 # Close the PLplot object to finalize16 $pl->close; 0 2 4 6 8

-4-2

02

4

Labels and Title

How do we add axis labels and a title? Options XLAB, YLAB specify the axislabels and TITLE specifies the plot title

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 # Generate a time series5 my $time = sequence(100)/10;

6 my $sinewave = 5 * sin($time);

7

8 # Create the PLplot object:9 my $pl = PLplot->new;

10

11 # Plot the time series12 $pl->xyplot($time, $sinewave13 , XLAB => ’time [s]’14 , YLAB => ’position [cm]’

15 , TITLE => ’Mass on Spring’

16 );

17

18 # Close the PLplot object to finalize19 $pl->close;

Mass on Spring

time [s]

posit

ion [

cm

]

0 2 4 6 8

-4-2

02

4

Setting the Device

Introduction

First Steps

Loading PLplot

Hello PLplot

Labels and Title

Setting the Device

Plotting Points

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

PLplot supports multiple devices. Specify them in your call tonew. For output to a window:

option DEV must be set to xwin, wxwidgets, or similar

For output to a file:

option DEV must be set to xfig, svg, pscairo, or similar

option FILE must give the output file’s name

For output to a memory buffer:

option DEV must be set to mem or memcairo

option MEM must be passed a piddle where the results willbe plot

Setting the Device

Introduction

First Steps

Loading PLplot

Hello PLplot

Labels and Title

Setting the Device

Plotting Points

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

1 use strict; use warnings; use PDL;

2 use PDL::Graphics::PLplot;

3

4 # Generate a time series5 my $time = sequence(100)/10;

6 my $sinewave = 5 * sin($time);

7

8 # Create a PLplot wxwidgets object:9 my $pl = PDL::Graphics::PLplot->new(

10 DEV => ’wxwidgets’

11 );

12

13 # Plot the time series14 $pl->xyplot($time, $sinewave

15 , XLAB => ’time [s]’, YLAB => ’position [cm]’

16 , TITLE => ’Mass on Spring’

17 );

18

19 # Close the PLplot object to finalize20 $pl->close;

Setting the Device

Introduction

First Steps

Loading PLplot

Hello PLplot

Labels and Title

Setting the Device

Plotting Points

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

1 use strict; use warnings; use PDL;

2 use PDL::Graphics::PLplot;

3

4 # Generate a time series5 my $time = sequence(100)/10;

6 my $sinewave = 5 * sin($time);

7

8 # Save the image to a postscript file9 my $pl = PDL::Graphics::PLplot->new(

10 DEV => ’ps’11 , FILE => ’myfile.eps’

12 );

13

14 # Plot the time series15 $pl->xyplot($time, $sinewave

16 , XLAB => ’time [s]’, YLAB => ’position [cm]’

17 , TITLE => ’Mass on Spring’

18 );

19

20 # Close the PLplot object to finalize21 $pl->close;

Plotting Points

Introduction

First Steps

Loading PLplot

Hello PLplot

Labels and Title

Setting the Device

Plotting Points

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

You can plot lines, symbols, or both by using the PLOTTYPEoption. You specify error bars in x and y by passing a scalar or apiddle with those errors to XERRORBAR and YERRORBAR.

PLOTTYPE => LINE plots data as lines (default)

PLOTTYPE => POINTS plots data as points

PLOTTYPE => LINEPOINTS plots data as lines and points

PLplot’s built in error-bars can plot asymmetric error bars,but the high-level PDL bindings do not support this.

Plotting Points

Introduction

First Steps

Loading PLplot

Hello PLplot

Labels and Title

Setting the Device

Plotting Points

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

To set the symbol type and size, use the SYMBOL andSYMBOLSIZE options.

Symbol sizes are measured as multiples of the default size

Symbol sizes can be fractional, such as 0.7 or 4.5

Symbols are identified by their number

Symbol numbers are shown on the PLplot demo page 7 athttp://plplot.sourceforge.net/examples.php?demo=071

1Warning: I had to choose a symbol numbered 200 or higher. YMMV.

Symbols Example

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 # Generate a time series5 my $time = sequence(100)/10;

6 my $sinewave = 5 * sin($time);

7

8 # Save the image to a postscript file9 my $pl = PLplot->new(

10 DEV => ’pscairo’

11 , FILE => ’Symbols.eps’

12 );

13

14 # Plot the time series as points15 $pl->xyplot($time, $sinewave16 , PLOTTYPE => ’POINTS’

17 , SYMBOL => 84318 , YERRORBAR => grandom($time)/2

19 );

20

21 $pl->close;

0 2 4 6 8

-4-2

02

4

Multiple Curves

Introduction

First Steps

Multiple Curves

TIMTOWTDI

Multidim Piddles

Multiple xyplots

Problems

Solutions

stripplots

stripplots and

rcols

SUBPAGES

Insets

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

TIMTOWTDI

Introduction

First Steps

Multiple Curves

TIMTOWTDI

Multidim Piddles

Multiple xyplots

Problems

Solutions

stripplots

stripplots and

rcols

SUBPAGES

Insets

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

Depending on what you want, there are at least five ways to plotmultiple curves on a plot.

plot a multidimensional piddle

call xyplot multiple times

use stripplots

specify SUBPAGES in the constructor

create insets using the VIEWPORT option

Multidimensional Piddles

The easiest way to plot multiple curves is to create a multi-dimensional piddlethat you plot with xyplot:1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 # Generate a time series5 my $time = sequence(100)/10;

6 my $sinewave = 5 * sin($time);

7 my $cosinewave = 4 * cos($time);8 my $toplot = cat($sinewave, $cosinewave);

9

10 # Save the image to a postscript file11 my $pl = PLplot->new(12 DEV => ’pscairo’

13 , FILE => ’Multidimensional.eps’

14 );

15

16 # Plot the time series17 $pl->xyplot($time, $toplot);

18

19 $pl->close;

0 2 4 6 8-4

-20

24

Multidimensional Piddles

Introduction

First Steps

Multiple Curves

TIMTOWTDI

Multidim Piddles

Multiple xyplots

Problems

Solutions

stripplots

stripplots and

rcols

SUBPAGES

Insets

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

Use color to differentiate different data sets:

For multidimensional piddles, plot as POINTS and use theCOLORMAP and PALETTE options.

For multiple calls to xyplot, use POINTS, COLORMAP, andPALETTE, or use COLOR option.

The COLORMAP option lets you specify a third value for each(x, y) pair, making it (x, y, colorval).Which color is associated with the minimum colorval? Whichcolor is associated with the maximum value? All of these are setwith the PALETTE.

Multidimensional Piddles

Introduction

First Steps

Multiple Curves

TIMTOWTDI

Multidim Piddles

Multiple xyplots

Problems

Solutions

stripplots

stripplots and

rcols

SUBPAGES

Insets

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

Valid PALETTEs include:

RAINBOW - from red to violet through the spectrumREVERSERAINBOW - violet through red

GREYSCALE - from black to white via greyREVERSEGREYSCALE - from white to black via grey

GREENRED - from green to redREDGREEN - from red to green

Note:

the default palette is not named

this only works when plotting points, not lines or error bars

Multidimensional Piddles

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3 my $pl = PLplot->new(4 DEV => ’pscairo’

5 ,FILE => ’Multidimensional2.eps’);

6

7 # Generate a time series and phase offset8 my $time = sequence(100)/10;

9 my $phi = zeroes(4)->xlinvals(0, 3)

10 ->transpose;11 my $sinewaves = 5*sin($time + $phi);

12 # Plot the time series and phi color key13 $pl->xyplot($time, $sinewaves14 , PLOTTYPE => ’POINTS’15 , COLORMAP => $phi

16 , TITLE => ’sin(x + #gf)’);

17 $pl->colorkey($phi, ’v’

18 , TITLE => ’#gf’

19 , VIEWPORT

20 => [0.93, 0.96, 0.15, 0.85]);

21 $pl->close;

sin(x + φ)

0 2 4 6 8

-4-2

02

4

φ

01

23

Call xyplot multiple times

Introduction

First Steps

Multiple Curves

TIMTOWTDI

Multidim Piddles

Multiple xyplots

Problems

Solutions

stripplots

stripplots and

rcols

SUBPAGES

Insets

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

Another way to plot multiple curves on the same plot is to callxyplot multiple times, specifying the COLOR option.

BLACK GREEN WHEAT

BLUE RED AQUAMARINE

GREY BLUEVIOLET 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

Call xyplot multiple times

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 # Generate a time series5 my $time = sequence(100)/10;

6 my $sinewave = 5 * sin($time);

7 my $cosinewave = 4 * cos($time);

8

9 # Save the image to a postscript file10 my $pl = PLplot->new(11 DEV => ’pscairo’

12 , FILE => ’Multiple curves.eps’

13 );

14

15 # Plot the sine in black, cosine in red16 $pl->xyplot($time, $sinewave);

17 $pl->xyplot($time, $cosinewave18 , COLOR => ’RED’);

19

20 $pl->close;

0 2 4 6 8

-4-2

02

4

0 2 4 6 8

-4-2

02

4

Problems with multiple xyplot calls

Introduction

First Steps

Multiple Curves

TIMTOWTDI

Multidim Piddles

Multiple xyplots

Problems

Solutions

stripplots

stripplots and

rcols

SUBPAGES

Insets

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

Things can easily go awry and not Do What You Mean:

Curve clipping - the first plot sets the plotting boundariesand later plots fall outside of those boundaries

Changing ‘current’ color - the first plot sets the ‘current’color and the second does not specify a color

Also, PLplots has a discrete color limit of 16, includingforeground and background color.

Curve Clipping

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 # Generate a time series5 my $time = sequence(100)/10;

6 my $sinewave = 5 * sin($time);7 my $cosinewave = 6 * cos($time);

8

9 # Save the image to a postscript file10 my $pl = PLplot->new(11 DEV => ’pscairo’

12 , FILE => ’Multiple curves2.eps’

13 );

14

15 # Plot the sine in black, cosine in red16 $pl->xyplot($time, $sinewave);

17 $pl->xyplot($time, $cosinewave

18 , COLOR => ’RED’);

19

20 $pl->close;

0 2 4 6 8

-4-2

02

4

0 2 4 6 8

-4-2

02

4

Changing Current Colors

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 # Generate a time series5 my $time = sequence(100)/10;

6 my $sinewave = 5 * sin($time);

7 my $cosinewave = 6 * cos($time);

8

9 # Save the image to a postscript file10 my $pl = PLplot->new(11 DEV => ’pscairo’

12 , FILE => ’Color wart.eps’

13 );

14

15 # Plot the cosine in red16 $pl->xyplot($time, $cosinewave

17 , COLOR => ’RED’);18 # Plot the sine in black19 # ERROR: current color is red!

20 $pl->xyplot($time, $sinewave);

21

22 $pl->close;

0 2 4 6 8

-4-2

02

46

0 2 4 6 8

-4-2

02

46

Solution to Changing Current Color

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 # Generate a time series5 my $time = sequence(100)/10;

6 my $sinewave = 5 * sin($time);

7 my $cosinewave = 6 * cos($time);

8

9 # Save the image to a postscript file10 my $pl = PLplot->new(11 DEV => ’pscairo’

12 , FILE => ’Color solution.eps’

13 );

14

15 # Plot the cosine in red16 $pl->xyplot($time, $cosinewave

17 , COLOR => ’RED’);

18 # Plot the sine in black19 $pl->xyplot($time, $sinewave20 , COLOR => ’BLACK’);

21

22 $pl->close;

0 2 4 6 8

-4-2

02

46

0 2 4 6 8

-4-2

02

46

Solution to Curve Clipping

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 # Generate a time series5 my $time = sequence(100)/10;

6 my $sinewave = 5 * sin($time);

7 my $cosinewave = 6 * cos($time);

8

9 # Save the image to a postscript file10 my $pl = PLplot->new(11 DEV => ’pscairo’

12 , FILE => ’Multiple curves3.eps’

13 );

14

15 # Plot the sine with full bounds16 $pl->xyplot($time, $sinewave

17 , BOX => [$time->minmax18 , $cosinewave->minmax]);19 # Plot the cosine in red20 $pl->xyplot($time, $cosinewave

21 , COLOR => ’RED’);

22

23 $pl->close;

0 2 4 6 8

-4-2

02

46

0 2 4 6 8

-4-2

02

46

stripplots

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 # Save the image to a postscript file5 my $pl = PLplot->new(6 DEV => ’pscairo’

7 , FILE => ’stripplots.eps’

8 );

9

10 # Generate a time series11 my $time = sequence(100)/10;

12

13 # Make stripplots with the14 # different time series15 $pl->stripplots($time16 , [sin($time), cos($time)]

17 , XLAB => ’x’

18 , YLAB => [’sine’, ’cosine’]

19 , COLOR => [’BLUE’, ’RED’]

20 , TITLE => ’Sine and Cosine’

21 );

22

23 $pl->close;

0 2 4 6 8

-1.0

0.0

1.0

sin

e

x

-1.0

0.0

1.0

cosin

e

Sine and Cosine

stripplots

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 # Save the image to a postscript file5 my $pl = PLplot->new(6 DEV => ’pscairo’

7 , FILE => ’stripplots.eps’

8 );

9

10 # Generate a time series11 my $time = sequence(100)/10;

12 my $data13 = cat(sin($time), cos($time));

14 # Make stripplots with the15 # different time series16 $pl->stripplots($time, $data

17 , XLAB => ’x’

18 , YLAB => [’sine’, ’cosine’]

19 , COLOR => [’BLUE’, ’RED’]

20 , TITLE => ’Sine and Cosine’

21 );

22

23 $pl->close;

0 2 4 6 8

-1.0

0.0

1.0

sin

e

x

-1.0

0.0

1.0

cosin

e

Sine and Cosine

stripplots and rcols

Introduction

First Steps

Multiple Curves

TIMTOWTDI

Multidim Piddles

Multiple xyplots

Problems

Solutions

stripplots

stripplots and

rcols

SUBPAGES

Insets

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

1 use strict; use warnings; use PDL;

2 use PDL::Graphics::PLplot;

3

4 my ($t, $data) = rcols(*DATA, 0, []);

5

6 my $pl = PDL::Graphics::PLplot->new;7

8 # Make stripplots with the different time series9 $pl->stripplots($t, $data->transpose);

10

11 $pl->close;12

13 DATA

14 # t x1 x2 x315 1 4 6 -1

16 2 3 9 3

17 3 2 8 7

18 3 -1 4 10

19 5 1 2 6

20 6 5 -1 5

SUBPAGES

Introduction

First Steps

Multiple Curves

TIMTOWTDI

Multidim Piddles

Multiple xyplots

Problems

Solutions

stripplots

stripplots and

rcols

SUBPAGES

Insets

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

When you create your PLplot object, you can carve the canvasinto immutable subpages.

1 my $pl = PDL::Graphics::PLplot->new(2 # ...3 , SUBPAGES => [$nx, $ny]

4 );

To advance to a new subpage, specify the SUBPAGE option.

1 # Advance to next subpage2 $pl->xyplot($x, $y

3 # other options...4 , SUBPAGE => 0

5 # other options...6 );

7

8 # Advance to fourth subpage9 $pl->xyplot($x, $y

10 # other options...11 , SUBPAGE => 4

12 # other options...13 );

SUBPAGES

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 # Generate a time series5 my $time = sequence(100)/10;

6

7 # Save the image to a postscript file8 my $pl = PLplot->new(9 DEV => ’pscairo’

10 , FILE => ’subpages.eps’11 , SUBPAGES => [2,2]);

12

13 # Plot the time series14 $pl->xyplot($time, sin($time)

15 , TITLE => ’Sine’);

16 $pl->xyplot($time, cos($time)17 , TITLE => ’Cosine’, SUBPAGE => 0);

18 $pl->xyplot($time, tan($time)19 , TITLE => ’Tangent’, SUBPAGE => 4);

20 $pl->xyplot($time, $time**221 , TITLE => ’Squared’, SUBPAGE => 3);

22

23 $pl->close;

Sine

0 2 4 6 8

-0.5

0.0

0.5

Cosine

0 2 4 6 8

-0.5

0.0

0.5

Tangent

0 2 4 6 8

-0.5

0.0

0.5

Squared

0 2 4 6 8

-0.5

0.0

0.5

Insets

Sometimes you want a small inset in one of the corners of your plot. If youwant to do this you should:

Specify the VIEWPORT

Specify the BOX

Use a smaller CHARSIZE

If the underlying plot has a title, you should probably undefine it

undefine or change the XLAB and YLAB unless you want to use thevalues from the underlying plot

Insets

1 use strict; use warnings;

2 use PDL::Graphics::PLplot;

3 use PDL; use PDL::NiceSlice;

4

5 # Generate a noisy time series6 my $time = sequence(1000) /10;

7 my $sinewave = 1 * sin($time) + grandom($time) / 3;

8

9 # Save the image to a postscript file10 my $pl = PDL::Graphics::PLplot->new(DEV => ’pscairo’, FILE => ’inset.eps’);

11

12 # Plot subset as the main plot13 $pl->xyplot($time(0:65), $sinewave(0:65), TITLE => ’Noisy Pendulum’

14 , YLAB => ’Displacement d [m]’, XLAB => ’Time t [s]’);

15

16 # Plot full data set as inset17 $pl->xyplot($time, $sinewave

18 , TITLE => undef

19 , VIEWPORT => [0.525, 0.825, 0.525, 0.775]

20 , BOX => [$time->minmax, $sinewave->minmax]21 , CHARSIZE => 0.6

22 );

23 $pl->close;

Insets

Noisy Pendulum

Time t [s]

Dis

pla

cem

ent

d [

m]

0 2 4 6

-10

1

Time t [s]

Dis

pla

cem

ent

d [

m]

0 20 40 60 80

-10

12

Boxes and Viewports

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Three Layers

Surface Dimensions

Viewport Positioning

Clipping Box

Examples

Summary

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

Three Layers of Coordinates

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Three Layers

Surface Dimensions

Viewport Positioning

Clipping Box

Examples

Summary

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

PLplot has three distinct measurements for your plot at anypoint:

the plotting surface’s dimensions

the viewport’s relative extent

the ‘natural’ coordinates within the viewport

Surface Dimensions

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Three Layers

Surface Dimensions

Viewport Positioning

Clipping Box

Examples

Summary

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

The dimensions of the canvas or surface that you are using canbe specified in the constructor (and cannot be changed later):

1 my $pl = PDL::Graphics::PLplot->new(2 # other options...3 PAGESIZE => [$width, $height]

4 # other options...5 );

These are measured either in pixels or milimeters depending onwhether the underlying format is a raster or vector format.

Viewport Positioning

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Three Layers

Surface Dimensions

Viewport Positioning

Clipping Box

Examples

Summary

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

The viewport carves out a chunk of space on the canvas forplotting and can be changed with each plotting function.

1 $pl->xyplot($x, $y

2 # other options3 , VIEWPORT => [$xmin, $xmax, $ymin, $ymax]

4 # other options5 );

6

7 # Plot on right half of the page8 VIEWPORT => [0.5, 1, 0, 1]

9 # Plot in upper half of the page10 VIEWPORT => [0, 1, 0, 0.5]

11 # Vertically centered, horizontally offset12 VIEWPORT => [0.5, 0.7, 0.4, 0.6]

Viewport values are fractions of the full page (or sub-page) width– all four values should be a number between 0 and 1.

Clipping Box

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Three Layers

Surface Dimensions

Viewport Positioning

Clipping Box

Examples

Summary

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

If the viewport indicates the chunk of space you will be graphingon, the clipping box indicates the coordinates within that chunkof space.1 $pl->xyplot($x, $y

2 # other options...3 , BOX => [$xmin, $xmax, $ymin, $ymax]

4 # other options...5 );

6

7 # x runs from 0 to 10, y from -8 to 8:8 BOX => [0, 10, -8, 8]

9 # piddles have the minmax method:10 BOX => [$x pdl->minmax, $y pdl->minmax]

When plotting using the specified box, a data point near (0,−8)will be plotted near the lower left corner and a data point near(5, 0) will be plotted at the center.Viewports define where plots are drawn. Tick labels, axis labels,and plot titles are drawn outside the viewport.

Examples

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Three Layers

Surface Dimensions

Viewport Positioning

Clipping Box

Examples

Summary

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

Here are some examples to show how each of these work.

Starting Example

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 my $x = zeroes(20)->xlinvals(-3, 3);

5 my $y = $x**2;

6

7 # Set the backgound to blue:8 my $pl = PLplot->new(9 DEV => ’pscairo’

10 , FILE => ’box example 1.eps’11 , BACKGROUND => ’SKYBLUE’

12 );

13

14 # Plot a quadratic function:15 $pl->xyplot($x, $y

16 , YLAB => ’y’, XLAB => ’x’);

17

18 $pl->close;

x

y

-2 0 2

24

68

I set the background to blue so you can see the extent of the canvas.

Page Size Example

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 my $x = zeroes(20)->xlinvals(-3, 3);

5 my $y = $x**2;

6

7 # Set a custom page size8 my $pl = PLplot->new(9 DEV => ’pscairo’

10 , FILE => ’box example 2.eps’

11 , BACKGROUND => ’SKYBLUE’12 , PAGESIZE => [360, 240]

13 );

14

15 # Plot a quadratic function:16 $pl->xyplot($x, $y

17 , YLAB => ’y’, XLAB => ’x’);

18

19 $pl->close;

x

y

-2 0 2

24

68

Viewport Example - Upper Right

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 my $x = zeroes(20)->xlinvals(-3, 3);

5 my $y = $x**2;

6 my $pl = PLplot->new(7 DEV => ’pscairo’

8 , FILE => ’box example 3.eps’

9 , BACKGROUND => ’SKYBLUE’

10 );

11

12 # Put the plot in the upper right:13 $pl->xyplot($x, $y

14 , YLAB => ’y’, XLAB => ’x’

15 , VIEWPORT16 => [0.5, 0.9, 0.6, 0.8]);

17

18 $pl->close;

x

y

-2 0 2

24

68

Viewport Example - Centered

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 my $x = zeroes(20)->xlinvals(-3, 3);

5 my $y = $x**2;

6 my $pl = PLplot->new(7 DEV => ’pscairo’

8 , FILE => ’box example 4.eps’

9 , BACKGROUND => ’SKYBLUE’

10 );

11

12 # Center the plot13 $pl->xyplot($x, $y

14 , YLAB => ’y’, XLAB => ’x’

15 , VIEWPORT16 => [0.3, 0.7, 0.3, 0.7]);

17

18 $pl->close;

x

y

-2 0 2

24

68

Viewport Example - Extreme Bounds

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 my $x = zeroes(20)->xlinvals(-3, 3);

5 my $y = $x**2;

6 my $pl = PLplot->new(7 DEV => ’pscairo’

8 , FILE => ’box example 5.eps’

9 , BACKGROUND => ’SKYBLUE’

10 );

11

12 # Try extreme bounds for the viewport13 $pl->xyplot($x, $y

14 , YLAB => ’y’, XLAB => ’x’

15 , VIEWPORT16 => [0, 1, 0.3, 1]);

17

18 $pl->close;

x-2 0 2

Viewport Example - Multiple Plots

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 my $x = zeroes(20)->xlinvals(-3, 3);

5 my $y = $x**2;

6 my $pl = PLplot->new(7 DEV => ’pscairo’

8 , FILE => ’box example 6.eps’

9 , BACKGROUND => ’SKYBLUE’);

10

11 # Big plot on left12 $pl->xyplot($x, $y, VIEWPORT13 => [0.1, 0.6, 0.1, 0.8]);

14 # Medium plot on upper right15 $pl->xyplot($x, $y, VIEWPORT16 => [0.5, 0.9, 0.6, 0.9]);

17 # Small plot on lower right18 $pl->xyplot($x, $y, VIEWPORT19 => [0.7, 0.9, 0.1, 0.4]);

20

21 $pl->close;

-2 0 2

24

68

-2 0 2

24

68

-2 0 2

24

68

Box Example - Default Box

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 my $x = zeroes(20)->xlinvals(-3, 3);

5 my $pl = PLplot->new(6 DEV => ’pscairo’

7 , FILE => ’box example 7.eps’

8 , BACKGROUND => ’SKYBLUE’);

9

10 # Sine wave on top11 $pl->xyplot($x, sin($x), VIEWPORT

12 => [0.1, 0.9, 0.55, 0.9]);

13 # Quadratic on bottom14 # BOX is inherited from first plot

15 $pl->xyplot($x, $x**2, VIEWPORT

16 => [0.1, 0.9, 0.1, 0.45]);

17

18

19 $pl->close;

-2 0 2

-0.5

0.0

0.5

-2 0 2

-0.5

0.0

0.5

Box Example - Tweaked Box

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 my $x = zeroes(20)->xlinvals(-3, 3);

5 my $pl = PLplot->new(6 DEV => ’pscairo’

7 , FILE => ’box example 8.eps’

8 , BACKGROUND => ’SKYBLUE’);

9

10 # Sine wave on top11 $pl->xyplot($x, sin($x), VIEWPORT

12 => [0.1, 0.9, 0.55, 0.9]);

13 # Quadratic on bottom14 $pl->xyplot($x, $x**2, VIEWPORT

15 => [0.1, 0.9, 0.1, 0.45]16 , BOX => [-3, 3, 0, 9]);

17

18

19 $pl->close;

-2 0 2

-0.5

0.0

0.5

-2 0 2

02

46

8

Box Example - Two Plots

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 my $x = zeroes(20)->xlinvals(-3, 3);

5 my $pl = PLplot->new(6 DEV => ’pscairo’

7 , FILE => ’box example 9.eps’

8 , BACKGROUND => ’SKYBLUE’);

9

10 # Sine wave11 $pl->xyplot($x, sin($x));

1213 # Plotting a quadratic on top works14 # but the bounds are not good

15 $pl->xyplot($x, $x**2);

16

17 $pl->close;

-2 0 2

-0.5

0.0

0.5

-2 0 2

-0.5

0.0

0.5

Box Example - Changing Box but not Viewport

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 my $x = zeroes(20)->xlinvals(-3, 3);

5 my $pl = PLplot->new(6 DEV => ’pscairo’

7 , FILE => ’box example 10.eps’

8 , BACKGROUND => ’SKYBLUE’);

9

10 # Sine wave11 $pl->xyplot($x, sin($x));

12

13 # Changing the box for the quadratic14 # does not work - bad y ticks

15 $pl->xyplot($x, $x**216 , BOX => [-3, 3, 0, 9]);

17

18 $pl->close;

-2 0 2

-0.5

0.0

0.5

-2 0 2

02

46

8

Summary

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Three Layers

Surface Dimensions

Viewport Positioning

Clipping Box

Examples

Summary

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

For multiple plots on the same viewport, set the box withthe first call to xyplot

For non-overlapping plots (on different viewports), specifythe box as necessary

The viewport specifies the extent of the plotting region; ticklabels, axis labels, and titles are drawn outside the viewport

Other Methods

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Sticky Options

Overview

shadeplot

histogram

bargraph

setparm

Text

Using the mem

Device

Miscellaneous

Conclusions

Sticky Options

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Sticky Options

Overview

shadeplot

histogram

bargraph

setparm

Text

Using the mem

Device

Miscellaneous

Conclusions

Once you specify a plotting option, the option will carry over tofuture calls on the same PLplot object.

Overview

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Sticky Options

Overview

shadeplot

histogram

bargraph

setparm

Text

Using the mem

Device

Miscellaneous

Conclusions

The high-level object-oriented interface in PDL::Graphics::PLplothas a handful of methods:

new, close create and finalize plot objects

xyplot, stripplots 2D plotting

shadeplot ‘topographical’ 3D data representation

histogram plot distribution of 1D data

bargraph plot distribution of categorical data

text annotate plots

setparm set various plotting parameters

shadeplot

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 my $pl = PLplot->new(5 DEV => ’pscairo’

6 , FILE => ’shadeplot2.eps’);

7

8 # Have x run from -10 to 109 # and y run from 1 to 7:

10 my $x = zeroes(51)

11 ->xlinvals(-10, 10);

12 my $y = zeroes(51)->xlinvals(1, 7);

13 # Define z = sin(x) + cos(y), a 2D piddle:14 my $z = sin($x)

15 + cos($y->transpose);16

17 # Make a shade plot with 15 color steps:18 $pl->shadeplot($z, 15, BOX => [$x->minmax, $y->minmax]);19

20 # Indicate the color scaling:21 $pl->colorkey($z, ’v’, VIEWPORT => [0.93, 0.96, 0.15, 0.85]);

22

23 $pl->close;

-10 -5 0 5 10

24

6

-10

1

shadeplot

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 my $pl = PLplot->new(5 DEV => ’pscairo’

6 , FILE => ’shadeplot3.eps’);

7

8 # Define z = sin(x) + cos(y), a 2D piddle:9 my $x=zeroes(51)->xlinvals(-10, 10);

10 my $y=zeroes(51)->xlinvals(1, 7);

11 my $z=sin($x) + cos($y->transpose);12

13 # Make a shade plot with 15 color steps:14 $pl->shadeplot($z, 15

15 , BOX => [$x->minmax, $y->minmax]16 , XLAB => ’x’, YLAB => ’y’

17 , TITLE => ’Egg Carton’);

18 # Add a ’vertical’ color key:19 $pl->colorkey($z, ’v’, VIEWPORT

20 => [0.93, 0.96, 0.15, 0.85]21 , XLAB => ’’, YLAB => ’’, TITLE => ’depth’);

22

23 $pl->close;

Egg Carton

x

y

-10 -5 0 5 10

24

6

depth

-10

1

histogram

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 my $pl = PLplot->new(5 DEV => ’pscairo’

6 , FILE => ’histogram.eps’);

7

8 # Generate some data:9 my $data = grandom(1000);

10

11 # Make a histogram of that data in 20 bins:12 $pl->histogram($data, 20);

13

14 $pl->close;-2 -1 0 1 2

0200

400

600

800

1000

histogram

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 my $pl = PLplot->new(5 DEV => ’pscairo’

6 , FILE => ’histogram2.eps’);

7

8 # Generate some data:9 my $data = grandom(1000);

10

11 # Get approximate binning:12 my $nbins = 20;

13 my $binwidth =

14 ($data->max-$data->min) / $nbins;15 my ($x, $y) = hist($data

16 , $data->minmax, $binwidth);

17

18 # Make a histogram of that data in 20 bins:19 my $fudgefactor = 1.1;

20 $pl->histogram($data, $nbins21 , BOX => [$x->minmax, 0, $y->max * $fudgefactor]);

22

23 $pl->close;

-3 -2 -1 0 1 2

020

40

60

80

100

120

140

bargraph

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 my $pl = PLplot->new(5 DEV => ’pscairo’

6 , FILE => ’bargraph.eps’);

7

8 # Generate some data:9 my @colors = qw(red orange yellow

10 green blue purple);

11 my $votes = random(scalar(@colors));

12

13 # Normalize the votes14 $votes /= $votes->sum;15

16 # Make a barchart of the votes.17 $pl->bargraph(\@colors, $votes);

18

19 $pl->close;0.10

0.15

0.20

red

orange

yellow

green

blue

purple

bargraph

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 my $pl = PLplot->new(5 DEV => ’pscairo’

6 , FILE => ’bargraph2.eps’);

7

8 # Generate some data:9 my @colors = qw(red orange yellow

10 green blue purple);

11 my $votes = random(scalar(@colors));

12

13 # Normalize the votes14 $votes /= $votes->sum;15

16 # Make a barchart of the votes.17 $pl->bargraph(\@colors, $votes

18 , COLOR => ’BLUE’19 , BOX => [0, scalar(@colors), 0, 1.1 * $votes->max]20 );

21

22 $pl->close;

0.00

0.05

0.10

0.15

0.20

0.25

red

orange

yellow

green

blue

purple

bargraph

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 my $pl = PLplot->new(5 DEV => ’pscairo’

6 , FILE => ’bargraph3.eps’);

7

8 # voting on letters:9 my @letters = (’a’ .. ’z’);

10 my $votes = random(0 + @letters);

11

12 # Normalize the votes13 $votes /= $votes->sum;14

15 # Make a barchart of the votes.16 $pl->bargraph(\@letters, $votes

17 , COLOR => ’LIGHTGOLDENROD’

18 , BOX => [0, scalar(@letters)

19 , 0, 1.1 * $votes->max]20 , MAXBARLABELS => 10

21 );

22

23 $pl->close;

02

46

8

(x10-2)

a d g j

m p s v y

setparm

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Sticky Options

Overview

shadeplot

histogram

bargraph

setparm

Text

Using the mem

Device

Miscellaneous

Conclusions

Text

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Typesetting

Greek Letters

psfrag

Annotations

Legends

Using the mem

Device

Miscellaneous

Conclusions

Typesetting

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Typesetting

Greek Letters

psfrag

Annotations

Legends

Using the mem

Device

Miscellaneous

Conclusions

Use escape sequences to insert superscripts, subscripts, Greekletters, etc.

#u - superscript until the next #d#d - subscript until the next #u#- - toggle underline mode#+ - toggle overline mode#fn - switch to normal (sans-serif) font#fr - switch to Roman (serif) font#fi - switch to italic font#fs - switch to script font

Unicode is supported though I won’t get into it here.

Typesetting

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 # Generate a time series5 my $time = sequence(100)/10;

6 my $sinewave = 5 * sin($time);

7

8 # Create the PLplot object:9 my $pl = PLplot->new(

10 DEV => ’pscairo’

11 , FILE => ’Typesetting.eps’);

12

13 # Plot the time series14 $pl->xyplot($time, $sinewave15 , XLAB => ’#fi time #fn [Hz#u-1#d]’16 , YLAB => ’#fiposition#fn [cm]’

17 , TITLE => ’#frMass on Spring’

18 );

19

20 # Close the PLplot object to finalize21 $pl->close;

Mass on Spring

time [Hz-1

]

posit

ion

[cm

]

0 2 4 6 8

-4-2

02

4

Greek Letters

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Typesetting

Greek Letters

psfrag

Annotations

Legends

Using the mem

Device

Miscellaneous

Conclusions

Use the string #gx to print the Greek letter equivalent of x:

A B G D E Z Y H I K L MA B Γ ∆ E Z H Θ I K Λ M

N C O P R S T U F X Q WN Ξ O Π P Σ T Y Φ X Ψ Ω

a b g d e z y h i k l mα β γ δ ǫ ζ η θ ι κ λ µ

n c o p r s t u f x q wν ξ o π ρ σ τ υ φ χ ψ ω

1 # Use greek symbol rho for density:2 $pl->xyplot($radius, $density

3 , YLAB => ’density #gr’

4 , # ...5 );

psfrag

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Typesetting

Greek Letters

psfrag

Annotations

Legends

Using the mem

Device

Miscellaneous

Conclusions

For LATEX typsetting, post-process eps images with psfrag.

replaces simple strings with any valid LATEX text.

ensures consistent fonts for both images and documents

Do not use the pscairo device. Use ps or psc.

Annotations

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Typesetting

Greek Letters

psfrag

Annotations

Legends

Using the mem

Device

Miscellaneous

Conclusions

To add text to a plot, use the text method, specifying theTEXTPOSITION option. The TEXTPOSITION takes either four orfive arguments. The four-argument form places text outside theviewport along one of its edges:

1 $pl->text($string, TEXTPOSITION => [$side, $disp, $pos, $just]);

$side is one of ’t’, ’b’, ’l’, or ’r’ indicating the top, bottom, left,or right edge

$disp is the number of character heights out from the edge

$pos is the position of the string’s reference point along theedge of the viewport, from 0 to 1

$just indicates the location of the reference point of the string.0 means the reference point is the string’s left edge; 1 indicatesthe right edge

Annotations

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Typesetting

Greek Letters

psfrag

Annotations

Legends

Using the mem

Device

Miscellaneous

Conclusions

The five-argument form places the text within the viewport at anarbitrary position and slope:

1 $pl->text($string, TEXTPOSITION => [$x, $y, $dx, $dy, $just]);

$x, $y are the location of the string’s reference point within theclipping box

$dx, $dy together indicate the slope along which the text isdrawn

$just indicates the location of the reference point of the string.0 means the reference point is the string’s left edge; 1 indicatesthe right edge

Annotations

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 my $pl = PLplot->new(5 DEV => ’pscairo’

6 , FILE => ’text1.eps’);

7

8 my $x = zeroes(100)->xlinvals(-3,3);9 my $y = $x**2;

10 $pl->xyplot($x, $y);

1112 $pl->setparm(CHARSIZE => 1.2);

13 # x label on the lower right14 $pl->text(’Position x [m]’,15 , TEXTPOSITION => [’b’, 3, 1, 1]);

16 # y label on the upper left17 $pl->text(’Potential Energy V [J]’18 , TEXTPOSITION => [’l’, 3.5, 1, 1]);

19 # title at the center top20 $pl->text(’Harmonic Oscillator’21 , CHARSIZE => 2.5, TEXTPOSITION => [’t’, 1.5, 0.5, 0.5]);

22

23 $pl->close;

-2 0 2

24

68

P [m]

Pote

nti

al Energ

y V

[J]

Harmonic Oscillator

Annotations

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;

3

4 my $pl = PLplot->new(5 DEV => ’pscairo’

6 , FILE => ’text2.eps’);

7

8 # Plot a quadratic9 my $x = zeroes(100)->xlinvals(-3,3);

10 my $y = $x**2;

11

12 $pl->xyplot($x, $y, TITLE => ’SHO’

13 , XLAB => ’Position x [m]’

14 , YLAB => ’Potential V [J]’);

15

16 # annotate negative slope at (-2, 4)17 $pl->text(’Slope is negative’18 , TEXTPOSITION => [-1.8, 4.1, 1, -4, 0.5]);

19 # annotate positive slope at (2, 4)20 $pl->text(’Slope is positive’21 , TEXTPOSITION => [1.9, 3.9, 10, 40, 1]);

22

23 $pl->close;

SHO

Position x [m]

Pote

nti

al V

[J]

-2 0 2

24

68

Slo

pe is n

egativ

e

Slo

pe is

posi

tive

Legends

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Typesetting

Greek Letters

psfrag

Annotations

Legends

Using the mem

Device

Miscellaneous

Conclusions

PLplot does not have a command to create legends. We mustmake them ourselves.

Legends are only necessary when plotting discrete data sets.

If possible, use color keys instead of constructing legends byhand.

Legends

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Typesetting

Greek Letters

psfrag

Annotations

Legends

Using the mem

Device

Miscellaneous

Conclusions

1 use strict; use warnings; use PDL;

2 use PDL::Graphics::PLplot;

3 my $pl = PDL::Graphics::PLplot->new(DEV => ’pscairo’

4 , FILE => ’legend.eps’);

5

6 my $x = zeroes(100)->xlinvals(-1.2, 1.2);

7 my @colors = qw(BLACK GREEN BLUE);

8 my @labels = qw(Linear Quadratic Cubic);

9

10 my $legend x = pdl(0.3, 0.5);

11 my $legend y = -0.5;

12

13 # Plot linear, quadratic, and cubic curves with a legend14 for my $i (0..2) 15 $pl->xyplot($x, $x**($i+1), COLOR => $colors[$i]);16 $pl->xyplot($legend x, pdl($legend y, $legend y)

17 , COLOR => $colors[$i]);

18 $pl->text($labels[$i], COLOR => ’BLACK’19 , TEXTPOSITION => [0.6, $legend y, 1, 0, 0]);

20 $legend y -= 0.2;

21 22

23 $pl->close;

Legends

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Typesetting

Greek Letters

psfrag

Annotations

Legends

Using the mem

Device

Miscellaneous

Conclusions

-1.0 -0.5 0.0 0.5 1.0

-1.0

-0.5

0.0

0.5

1.0

-1.0 -0.5 0.0 0.5 1.0

-1.0

-0.5

0.0

0.5

1.0

Linear

-1.0 -0.5 0.0 0.5 1.0

-1.0

-0.5

0.0

0.5

1.0

-1.0 -0.5 0.0 0.5 1.0

-1.0

-0.5

0.0

0.5

1.0

Quadratic

-1.0 -0.5 0.0 0.5 1.0

-1.0

-0.5

0.0

0.5

1.0

-1.0 -0.5 0.0 0.5 1.0

-1.0

-0.5

0.0

0.5

1.0

Cubic

Legends

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Typesetting

Greek Letters

psfrag

Annotations

Legends

Using the mem

Device

Miscellaneous

Conclusions

1 use strict; use warnings; use PDL;

2 use PDL::Graphics::PLplot;

3 my $pl = PDL::Graphics::PLplot->new(DEV => ’pscairo’

4 , FILE => ’no legend.eps’);

5

6 my $x = zeroes(100)->xlinvals(0, 1.2);

7 my $powers = zeroes(7)->xlinvals(1, 4)->transpose;8 my $ys = $x**$powers;

9

10 $pl->xyplot($x, $ys

11 , COLORMAP => $powers

12 , XLAB => ’x’, YLAB => ’x#upower#d’

13 , PALETTE => ’REDGREEN’, PLOTTYPE => ’POINTS’

14 );

15 $pl->colorkey($powers, ’v’

16 , XLAB => undef, YLAB => undef

17 , TITLE => ’power’

18 , VIEWPORT => [0.93, 0.96, 0.15, 0.85]

19 );

20

21 $pl->close;

Legends

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Typesetting

Greek Letters

psfrag

Annotations

Legends

Using the mem

Device

Miscellaneous

Conclusions

x

xpower

0.0 0.2 0.4 0.6 0.8 1.0 1.2

0.0

0.5

1.0

1.5

2.0

power

12

34

Using the mem Device

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Uses for mem DeviceCreating a Memory

BufferPlotting over an

image

Miscellaneous

Conclusions

Uses for mem Device

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Uses for mem DeviceCreating a Memory

BufferPlotting over an

image

Miscellaneous

Conclusions

load an image and plot over that image

plot to a custom windowing device

animated plots

Creating a Memory Buffer

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Uses for mem DeviceCreating a Memory

BufferPlotting over an

image

Miscellaneous

Conclusions

1 ## For the mem device ##2

3 # Allocate the buffer4 my $buffer = zeroes(byte, 3, $width, $height);

5

6 # Create the PLplot object7 my $pl = PDL::Graphics::PLplot->new(8 DEV => ’mem’

9 , MEM => $buffer

10 );

11

12

13 ## For the memcairo device ##14

15 # Allocate the buffer16 my $buffer = zeroes(byte, 4, $width, $height);

17

18 # Create the PLplot object19 my $pl = PDL::Graphics::PLplot->new(20 DEV => ’memcairo’

21 , MEM => $buffer

22 );

Plotting over an image

1 use strict; use warnings; use PDL;

2 use aliased ’PDL::Graphics::PLplot’;3 use PDL::IO::Pic;

4

5 # Load an image6 # (has dims 3 x width x height)7 my $pic = rpic(’starry night.jpg’);

8 # Flip the y axis9 $pic = $pic->slice(’:,:,-1:0:-1’);

10 # Whiten the image a bit11 $pic = 127 + $pic / 2;

12

13 my $pl = PLplot->new(DEV => ’mem’14 , MEM => $pic);

15

16 # Plot a quadratic curve over the image17 my $x=zeroes(51)->xlinvals(-10, 10);

18 $pl->xyplot($x, $x**2);

19 $pl->close;20

21 # flip the y axis back and save the image22 $pic = $pic->slice(’:,:,-1:0:-1’);23 wpic($pic, ’starry plot.png’);

Miscellaneous

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

use aliased

Log plots

Bad Values

Conclusions

use aliased

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

use aliased

Log plots

Bad Values

Conclusions

The aliased module, available on CPAN, makes dealing withlength package names much simpler:

1 use strict;

2 use warnings;

3 use PDL;4 use aliased ’PDL::Graphics::PLplot’;

56 my $pl = PLplot->new(DEV => ’pscairo’

7 , FILE => ’text.eps’);

8

9 # ...

Log plots

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

use aliased

Log plots

Bad Values

Conclusions

If you need to have one (or both) axes to have a log scale, usethe XBOX or YBOX option, these let you determine certain aspectsof the x and y ticks and tick labels.

1 $pl->xyplot(log($x), $y

2 # include ’l’ for a logarithmic axis3 , XBOX => ’bclnst’

4 );

Bad Values

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

use aliased

Log plots

Bad Values

Conclusions

The PDL wrapper to PLplot supports bad values.

Bad values are not plotted, and a gap is inserted into the plot.

Conclusions

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

What I Skipped

Strengths and

Weaknesses

Improvements

Other

Documentation

What I Skipped

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

What I Skipped

Strengths and

Weaknesses

Improvements

Other

Documentation

the many low-level commands

3D plots (using low-level commands)

options for creation: BACKGROUND, JUST, OPTS,

ORIENTATION

plotting options: LINEWIDTH, LINESTYLE,

MAJTICKSIZE, MINTICKSIZE, NXSUB, NYSUB, XBOX,

XTICK, YBOX, YTICK, ZRANGE

Strengths and Weaknesses

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

What I Skipped

Strengths and

Weaknesses

Improvements

Other

Documentation

The PDL PLplot bindings are excellent at plotting 2D data.

The bindings are poor for 3D plotting and have many quirks.

Improvements

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

What I Skipped

Strengths and

Weaknesses

Improvements

Other

Documentation

better overall documentation

bring low-level functions up-to-date with current PLplotlibrary

create low-level wrappers for colored error bars and lines

better handling of histograms and bargraphs with moreoptions

high level 3D plotting

Alien::PLplot

Other Documentation

Introduction

First Steps

Multiple Curves

Boxes and Viewports

Other Methods

Text

Using the mem

Device

Miscellaneous

Conclusions

What I Skipped

Strengths and

Weaknesses

Improvements

Other

Documentation

PLplot’s web site:http://plplot.sourceforge.net/documentation.php.

PDL::Graphics::PLplot:http://pdl.perl.org/?docs=Graphics/PLplot&title=PDL::Grap

top related