Transcript
Page 1: MATLAB Plotting - people.sc.fsu.edu

MATLAB PlottingMATH2070: Numerical Methods in Scientific Computing I

Location: http://people.sc.fsu.edu/∼jburkardt/classes/math2070 2019/matlab plotting/matlab plotting.pdf

How can we illustrate our data and mathematical results?

MATLAB Plots

Plots represent our data, help us to see patterns and problems, and convince our viewers of our results.

Plotting allows us to visualize data. Before we do any analysis, this allows us to explore the data; after ananalysis, we use various kinds of plots to analyze and publish our results. MATLAB has a rich set of plottingcommands that we will explore, including

• line plot, a sequence of points (xi, yi) connected by lines;• line plots, several graphs on a single plot;• scatter plot, a set of points (xi, yi) indicated by markers;• bar plot, a set of data yi displayed as bar heights;• histogram plot, data to be grouped into bins before bar plotting;• contour plot, contour lines of a function f(x, y);• color contour plot, contour colors of a function f(x, y);• vector plot, a 2D display of vectors (u,v)(x,y), representing a gradient field, an ODE direction field,

or a flow of some kind.• surface plot, a 3D plot of the surface z = f(x, y);• polygon fill, polygons filled with color.• tree plot, representing a branching process;• graph plot, a set of labeled points pi, and a list of two-way connections (pi ↔ pj).• digraph plot, a set of labeled points pi, and a list of one-way connections (pi → pj).

1 Exercise: Line plot of the BULGARIA data

The text data file bulgaria data.txt records a sequence (yi, pi), of years and population. A line plot connectsthe data points, suggesting a smooth functional behavior.

1

Page 2: MATLAB Plotting - people.sc.fsu.edu

• load the text data file

1 data = load ( ’ bu l ga r i a da ta . txt ’ ) ;

• plot year versus population (several tries):

1 plot ( data ( : , 1 ) , data ( : , 2 ) ) ;2 plot ( data ( : , 1 ) , data ( : , 2 ) , ’ r ’ ) ;3 plot ( data ( : , 1 ) , data ( : , 2 ) , ’ b . ’ , ’ markers i ze ’ , 20 ) ;4 plot ( data ( : , 1 ) , data ( : , 2 ) , ’ go− ’ ) ;5 plot ( data ( : , 1 ) , data ( : , 2 ) , ’m− ’ , ’ l i n ew id th ’ , 3 ) ;

• Force y axis to run from 0 to 10,000,000:

1 ylim ( [ 0 . 0 , 10000000.0 ] )

• Customize the plot:

1 grid ( ’ on ’ )2 xlabel ( ’<−− Year −−> ’ )3 ylabel ( ’<−− Populat ion −−> ’ )4 t i t l e ( ’ Changes in Bulgar ian Populat ion ’ )5 t i t l e ( ’ Changes in Bulgar ian Populat ion ’ , ’ f o n t s i z e ’ , 16 )

• save a PNG version:

1 print ( ’−dpng ’ , ’ b u l g a r i a l i n e p l o t . png ’ ) ;

2 Exercise: Line plots of the PRICE data

The file price data.txt is a table of average monthly prices for 11 consumer products, between February 2008and February 2018. There are 241 records, and each record contains 13 items: the month, the year, and theprices of 11 goods. Columns 3, 10 and 13 contain the prices of bananas, gas, and milk, respectively. Wewant a single plot that shows line plots for all three items together. There are two ways to do this.

• load the file, extract data, add month label:

1 data = load ( ’ p r i c e da t a . txt ’ ) ;2 bananas = data ( : , 3 ) ;3 gas = data ( : , 1 0 ) ;4 milk = data ( : , 1 3 ) ;5 month = 1 : 2 4 1 ;

• plot data all at once, or in three steps:

1 plot ( month , bananas , month , gas , month , milk , ’ l i n ew id th ’ , 3 ) ;2 c l f ( ) ;3 hold ( ’ on ’ ) ;4 plot ( month , bananas , ’ l i n ew id th ’ , 3 ) ;5 plot ( month , gas , ’ l i n ew id th ’ , 3 ) ;6 plot ( month , milk , ’ l i n ew id th ’ , 3 ) ;7 hold ( ’ o f f ’ )

• Finish the plot:

1 legend ( ’ Bananas ’ , ’Gas ’ , ’ Milk ’ ) ;2 grid ( ’ on ’ )3 xlabel ( ’Month Index ’ , ’ f o n t s i z e ’ , 16 ) ;4 ylabel ( ’ Pr i ce in Do l l a r s ’ , ’ f o n t s i z e ’ , 16 ) ;5 t i t l e ( ’ Pr i ces , Feb 2008−Feb 2018 ’ , ’ f o n t s i z e ’ , 16 ) ;6 print ( ’−dpng ’ , ’ p r i c e l i n e p l o t s . png ’ ) ;

2

Page 3: MATLAB Plotting - people.sc.fsu.edu

3 Exercise: Scatter plot of the FAITHFUL data

The file faithful data.txt contains 272 observations of the Old Faithful geyser. Each line records 2 items:the eruption length in minutes, and the wait in minutes until the next eruption. It might seem reasonablethat the two variables are related. A long eruption might mean a long subsequent wait, for instance. Suchpatterns can be investigated using a scatter plot, in which we simply put a mark at each point (x, y) forwhich we have data.

• load the data:

1 data = load ( ’ f a i t h f u l d a t a . txt ’ ) ;

• Use the plot() command or the scatter() command:

1 plot ( data ( : , 1 ) , data ( : , 1 ) , ’ ro ’ , ’ markers i ze ’ , 15 ) ;2 s c a t t e r ( data ( : , 1 ) , data ( : , 2 ) , ’ f i l l e d ’ ) ;

• Finish the plot:

1 grid ( ’ on ’ )2 t i t l e ( ’Old Fa i t h f u l Eruption / Pause Durat ions ’ )3 xlabel ( ’<−− Eruption Duration ( minutes )−−> ’ )4 ylabel ( ’<−− Pause Duration ( minutes ) −−> ’ )5 print ( ’−dpng ’ , ’ f a i t h f u l s c a t t e r p l o t . png ’ ) ;

What relationship between eruption time and wait time is suggested by the scatter plot of the data?

4 Exercise: Bar plot of the SCHOOLYEAR data

Both line and scatter plots assume each data item has the form (x, y). Sometimes, however, instead of xdata, we have some kind of label. Thus, we might have a list of car models and their prices. A bar plotallows us to represent the data as bars, identified by their data labels, with heights proportional to the datavalues.

MATLAB has some trouble reading data files that contain a mixture of text and numeric data, so instead,we will get our data from a MATLAB function.

• Get country name and schoolyear length from function schoolyear data.m:

1 [ country , days ] = schoo lyea r da ta ( ) ;

• Make a horizontal bar plot of days, and use country names as labels:

1 barh ( days ) ;2 set ( gca , ’ y t i c k l a b e l ’ , country ) ;

• Finish the plot:

1 grid ( ’ on ’ ) ;2 xlabel ( ’<−− School Year in Days −−> ’ , ’ FontSize ’ , 16 ) ;3 t i t l e ( ’ I n t e r n a t i o n a l Var ia t ion in School Year ’ , ’ FontSize ’ , 24 ) ;4 print ( ’−dpng ’ , ’ s c h o o l y e a r ba r p l o t . png ’ ) ;

3

Page 4: MATLAB Plotting - people.sc.fsu.edu

5 Exercise: Histogram of the SNOWFALL data

Suppose we want to display a large set of observations of some numerical quantity, (x1, x2, ..., xn). If thedata has some slowly varying trend, a line plot might be suitable. If the data is not too numerous, a barplot might work. But if the data is numerous and somewhat chaotic, we are better off with a histogram,which simplifies the data by grouping it into a small number of bins. A histogram then shows how manydata items fall into each range.

• load the file snowfall data.txt and extract column 10:

1 data = load ( ’ s now fa l l da t a . txt ’ ) ;2 inche s = data ( : , 1 0 ) ;

• Create a bar plot (bad idea), then switch to histogram, then specify number of bins:

1 bar ( inche s ) ;2 histogram ( inche s ) ;3 histogram ( inches , 25 ) ;

• Finish the plot:

1 grid ( ’ on ’ ) ;2 xlabel ( ’<−− Total Yearly Snowfa l l in Inches −−> ’ ) ;3 ylabel ( ’<−− Frequency −−> ’ ) ;4 t i t l e ( ’ Yearly Snowfa l l in Michigan ’ ) ;5 print ( ’−dpng ’ , ’ snowfa l l h i s t og ram . png ’ ) ;

What features of the data does the histogram allow you to see right away?

6 Exercise: Contour plot of the VOLCANO data

We may have a collection of measurements of temperature, or elevation, or pollution levels, sampled atregular points on a grid. One way to visualize such data is to use a contour plot. Contours can be indicatedby a sequence of curves, each of which connects points with the same value of the measurement; a morevivid image can be done using colors.

• access an 82× 61 array z from data file volcano data.txt:

1 z = load ( ’ vo lcano data . txt ’ ) ;

• Make a line contour plot:

1 contour ( z , ’ l i n ew id th ’ , 3 ) ;

• Make a color contour plot with colorbar:

1 contour f ( z ) ;2 colorbar ( ) ;

• Make a surface plot with colorbar:

1 surf ( z , ’ edgeco l o r ’ , ’ none ’ ) ;2 colorbar ( ) ;3 xlabel ( ’<−− X −−> ’ ) ;4 ylabel ( ’<−− Y −−> ’ ) ;5 zlabel ( ’<−− Z −−> ’ ) ;6 t i t l e ( ’ Sur face p l o t o f volcano he ight ’ ) ;7 print ( ’−dpng ’ , ’ v o l c ano su r f a c e . png ’ ) ;

4

Page 5: MATLAB Plotting - people.sc.fsu.edu

7 Exercise: Vector plot of the HEX2() function

Recall the hex2() function that we tried to minimize in a previous lab:

f(x, y) = 2x2 − 1.05x4 + x6/6 + xy + y2

It would be interesting to see a plot displaying both the contour lines of this function, and the field ofnegative gradient vectors that point towards local minimizers.

• create vectors x and y, then tables X and Y . Define Z(X,Y ) by calling hex2():

1 x = linspace ( −2, +2, 31 ) ;2 y = linspace ( −2, +2, 31 ) ;3 [X,Y] = meshgrid ( x , y ) ;4 Z = hex2 ( X, Y ) ; % I modi f ied hex2 () to take two separa te inpu t s .

• Estimate the gradient using finite differences:

1 h = 0 . 0 1 ;2 [ dZdX, dZdY ] = gradient ( Z , h ) ;

• Make one plot with both contours and vectors:

1 hold ( ’ on ’ ) ;2 contour ( X, Y, Z , 25 ) ;3 quiver ( X, Y, −dZdX, −dZdY, 2 .0 ) ;4 hold ( ’ o f f ’ )

We could also have written a function to evaluate the gradient exactly, instead of calling MATLAB’sgradient() function.

8 Exercise: Surface plot of the MEXICAN HAT function

A contour plot can also be useful to examine the behavior of a function z = f(x, y); even better is a 3Dsurface plot. In this case, we have to generate the (x, y) grid values, and set up a way to evaluate thefunction.

• create vectors x and y, then tables X and Y . Define Z(X,Y ) using an auxilliary variable R:

1 x = linspace ( −8, 8 , 33 ) ;2 y = linspace ( −8, 8 , 33 ) ;3 [X,Y] = meshgrid ( x , y ) ;4 R = sqrt ( X.ˆ2 + Y.ˆ2 + eps ) ;5 Z = sin ( R ) . / R;

• Compare contour, color contour, and surface plots:

1 contour ( X, Y, Z ) ;2 contour f ( X, Y, Z ) ;3 surf ( X, Y, Z ) ;

9 Exercise: polygon fill plot of MARIO

The MATLAB fill() command can be used to create a plot made up of one or more polygons, each filledwith a specific color.

The form of the command is fill(X,Y,C), where X and Y are the coordinates of a polygon’s vertices, andC is a 3-component RGB color specification, that is, real numbers between 0 and 1. To get an idea of howthis works, type

5

Page 6: MATLAB Plotting - people.sc.fsu.edu

1 hold ( ’ on ’ )2 f i l l ( [ 0 , 1 , 0 ] , [ 0 , 0 , 1 ] , [ 1 , 0 , 0 ] )3 f i l l ( [ 0 . 5 , 1 . 0 , 1 . 0 , 0 . 5 ] , [ 0 . 5 , 0 . 5 , 1 . 0 , 1 . 0 ] , [ 0 , 0 , 1 ] )4 axis ( ’ square ’ ) % ( otherwise , a square l ook s l i k e a r e c t ang l e )5 hold ( ’ o f f ’ )

This command can be used to make beautiful contour color plots, diagrams of meshes, tilings, and otherimages. However, to make an interesting plot often requires entering a lot of data.

To see the kind of plots this command can create, download the file mario.m and run it!

10 Exercise: Tree plot of the GENEALOGY data

A tree plot is way to illustrate a process which involves branching or dependence. A tree plot can illustrateall the paths that start at the initial point and branch one way or another at decision points.The locations on a tree are called nodes, and the node representing the initial state is called the root node.If we assign each node an identifying index, then the structure of the tree can be described if each nodeidentifies its “parent node”, which connects it back to the root node.

1. create a tree description and display the tree:

1 nodes = [ 0 , 1 , 2 , 2 , 4 , 4 , 4 , 1 , 8 , 8 , 10 , 10 ] ;2 t r e e p l o t ( nodes ) ;

2. Create labels for the nodes:

1 l a b e l s = { . . .2 ’Adam ’ ,3 ’ Bert ’ ,4 ’ Carl ’ ,5 ’ Dale ’ ,6 ’Eddy ’ ,7 ’ Fred ’ ,8 ’Gina ’ ,9 ’Hank ’ ,

10 ’ Inez ’ ,11 ’ Jane ’ ,12 ’Kurt ’ ,13 ’ Leah ’ } ;

3. Find out where the nodes are, and attach the labels to the nodes:

1 [ x , y ] = t r e e l ayou t ( nodes ) ;2 for i = 1 : length ( x )3 text ( x ( i ) + 0 . 1 , y ( i ) , l a b e l s { i } ) ;4 end

11 Exercise: Graph plot of the NETWORK data

Mathematically, a graph is a set of nodes, some of which are connected by edges. The edges usually representtwo-way connections; one-way connections arise in “directed graphs”.The MATLAB function graph() can define a graph G using two lists of equal length, containing the startingnode s and terminal node t of each edge.For your exercise, consider the following network:

6

Page 7: MATLAB Plotting - people.sc.fsu.edu

A plot of the network data.

1. use the picture above to fill in the missing data in these MATLAB commands that define the edges:

1 s = [ 1 , 1 , 2 , . . . , 10 ] ;2 t = [ 2 , 3 , 4 , . . . , 11 ] ;

2. Use the edges to create a graph called G, and plot it:

1 G = graph ( s , t ) ;2 plot ( G ) ;3 t i t l e ( ’A Network graph ’ )

12 Exercise: Directed graph plot of the WEB data

A directed graph displays nodes connected by one-way edges. There may be a value associated with eachedge, representing a weight, length or probability of access. A good display should include that information.For your exercise, consider the following network, and assume that nodes 1 through 6 are labeled Alpha,Beta, Gamma, Delta, Epsilon and Zeta, respectively.

7

Page 8: MATLAB Plotting - people.sc.fsu.edu

A plot of the web data.

1. use the picture above to describe the graph of the network by filling in the s and t vectors:

1 s = [ 1 , 1 , 2 , . . . , 6 ] ;2 t = [ 5 , 6 , 1 , . . . , 4 ] ;

2. Define the digraph and label each node and edge:

1 G = digraph ( s , t , nodenames ) ;2 node l ab e l s = { ’ Alpha ’ , ’ Beta ’ , ’Gamma ’ , ’ Delta ’ , ’ Eps i lon ’ , ’ Zeta ’ } ;3 e d g e l a b e l s = { ’AE ’ , ’AZ ’ , ’BA’ , ’BG’ , ’BD’ , ’GD’ , ’GE’ , ’DE ’ , ’EA ’ , ’EZ ’ , ’ZA ’ } ;

3. Plot the graph

1 > plot ( G, . . .2 ’ Layout ’ , ’ c i r c l e ’ , . . .3 ’ EdgeLabel ’ , e dg e l ab e l s , . . .4 ’ NodeLabel ’ , node l abe l s , . . .5 ’ ArrowSize ’ , 15 ) ;

13 No Computing Assignment for this Lab!

8


Top Related