2D Graphs

L. Oberbroeckling, Fall 2011.

NOTE: m-files don't view well in Internet Explorer. Use Mozilla Firefox or Safari instead to view these pages.

Contents

You may want to have the following commands at the top of your script files to "start fresh"

clc         % clears the command window
clear       % clears ALL variables
format      % resets the format to the default format

There are many other examples on the H-drive!

There are several ways to produce graphs of functions. This page will not show all of them; it will show the way that is the most customizable and can be easily extended to more complicated settings (like parametric equations, 3D, etc.) This is also a learn-by-example page. I do not explain every command or show everything. It is up to you to experiment and look up these commands to better understand them.

  1. Set up your domain by creating a vector x (or whatever variable name you want as long as it starts with a letter). There are several ways to do this, the easiest is using the command linspace:
  1. Calculate the y-values for x USING COMPONENT-WISE COMPUTATIONS
  2. IMPORTANT TIP: make sure you use ; at the end of the lines defining your variables so you don't get extraneous output (see "Forgetting Semi-colons" below).
  3. Basic plot command: plot(x,y)

Basic 2D Graph

x=linspace(0.5,2);
y= (2*x.^2 + 5)./x;
plot(x,y)

Bad Domain Definition

This example shows how you need to be careful when defining x.

x=-pi:pi;
y=sin(x);
plot(x,y)

Better Domain

The way is defined above, x is vector of numbers starting at -pi, increasing by 1 and ending at pi (or in this case, 2.8584 because that is the biggest number less than pi in the sequence). Thus the graph is a bunch of lines connecting these points, and so y=sin x appears jagged. Here's a better way:

x2=-pi:.1:pi;
y=sin(x2);
plot(x2,y)

The way x2 is defined above, it is a vector of numbers between -pi and pi with an increment of .1. You may need to experiment with this increment depending on what your curve is to get a smooth graph but without too many elements in the vector so the computer isn't unnecessarily slow. Using linspace instead (as mentioned above) is many times easier.

x3=linspace(-pi,pi);
y=sin(x3);
plot(x3,y)

Forgetting Semi-colons

Here is why you want to use semi-colons:

x3=linspace(-pi,pi)
y=sin(x3)
plot(x3,y)
x3 =

  Columns 1 through 7

   -3.1416   -3.0781   -3.0147   -2.9512   -2.8877   -2.8243   -2.7608

  Columns 8 through 14

   -2.6973   -2.6339   -2.5704   -2.5069   -2.4435   -2.3800   -2.3165

  Columns 15 through 21

   -2.2531   -2.1896   -2.1261   -2.0627   -1.9992   -1.9357   -1.8723

  Columns 22 through 28

   -1.8088   -1.7453   -1.6819   -1.6184   -1.5549   -1.4915   -1.4280

  Columns 29 through 35

   -1.3645   -1.3011   -1.2376   -1.1741   -1.1107   -1.0472   -0.9837

  Columns 36 through 42

   -0.9203   -0.8568   -0.7933   -0.7299   -0.6664   -0.6029   -0.5395

  Columns 43 through 49

   -0.4760   -0.4125   -0.3491   -0.2856   -0.2221   -0.1587   -0.0952

  Columns 50 through 56

   -0.0317    0.0317    0.0952    0.1587    0.2221    0.2856    0.3491

  Columns 57 through 63

    0.4125    0.4760    0.5395    0.6029    0.6664    0.7299    0.7933

  Columns 64 through 70

    0.8568    0.9203    0.9837    1.0472    1.1107    1.1741    1.2376

  Columns 71 through 77

    1.3011    1.3645    1.4280    1.4915    1.5549    1.6184    1.6819

  Columns 78 through 84

    1.7453    1.8088    1.8723    1.9357    1.9992    2.0627    2.1261

  Columns 85 through 91

    2.1896    2.2531    2.3165    2.3800    2.4435    2.5069    2.5704

  Columns 92 through 98

    2.6339    2.6973    2.7608    2.8243    2.8877    2.9512    3.0147

  Columns 99 through 100

    3.0781    3.1416


y =

  Columns 1 through 7

   -0.0000   -0.0634   -0.1266   -0.1893   -0.2511   -0.3120   -0.3717

  Columns 8 through 14

   -0.4298   -0.4862   -0.5406   -0.5929   -0.6428   -0.6901   -0.7346

  Columns 15 through 21

   -0.7761   -0.8146   -0.8497   -0.8815   -0.9096   -0.9341   -0.9549

  Columns 22 through 28

   -0.9718   -0.9848   -0.9938   -0.9989   -0.9999   -0.9969   -0.9898

  Columns 29 through 35

   -0.9788   -0.9638   -0.9450   -0.9224   -0.8960   -0.8660   -0.8326

  Columns 36 through 42

   -0.7958   -0.7557   -0.7127   -0.6668   -0.6182   -0.5671   -0.5137

  Columns 43 through 49

   -0.4582   -0.4009   -0.3420   -0.2817   -0.2203   -0.1580   -0.0951

  Columns 50 through 56

   -0.0317    0.0317    0.0951    0.1580    0.2203    0.2817    0.3420

  Columns 57 through 63

    0.4009    0.4582    0.5137    0.5671    0.6182    0.6668    0.7127

  Columns 64 through 70

    0.7557    0.7958    0.8326    0.8660    0.8960    0.9224    0.9450

  Columns 71 through 77

    0.9638    0.9788    0.9898    0.9969    0.9999    0.9989    0.9938

  Columns 78 through 84

    0.9848    0.9718    0.9549    0.9341    0.9096    0.8815    0.8497

  Columns 85 through 91

    0.8146    0.7761    0.7346    0.6901    0.6428    0.5929    0.5406

  Columns 92 through 98

    0.4862    0.4298    0.3717    0.3120    0.2511    0.1893    0.1266

  Columns 99 through 100

    0.0634    0.0000

Clearly we don't need to see the values of x and y; we just want their points connected to make a nice graph.

Multiple Graphs in 2D

Here's another basic example. This shows you one way to put 2 functions on the same graph with different colors and line types, along with a legend and title.

clear
x=linspace(-5,5);
y1=x.^2;          % y values of the first plot
y2 = 2*x;         % y values of the second plot
plot(x,y1,'-', x,y2,'--')
legend('y','dy/dx')
title('A plot example for multiple graphs')

Multiple Graphs using HOLD ON/HOLD OFF

The above plot command can get cumbersome if you have a lot of functions to plot or a lot of fine-tuning of the colors, line types, etc. If you experiment, you'll notice that if you follow a plot command with another plot command, the figure will only show the last plot command. If you use the hold on command, any command that has anything to do with plotting will appear on the current figure. Even subsequent plot commands will just add to the current figure. Thus it is very important to use the hold off command when done.

clear
x=linspace(-5,5);
y1=x.^2;          % y values of the first plot
y2 = 2*x;         % y values of the second plot
plot(x,y1)
hold on
plot(x,y2,'--')
legend('y','dy/dx')
title('A plot example for multiple graphs')
hold off            % VERY IMPORTANT TO HAVE THE HOLD OFF COMMAND!

Plotting Points

You must specify that you don't want the points "connected" by specifying a marker. There are several types of markers.

clear
x = linspace(-2*pi, 2*pi);
y = cos(x);
x2 = [-3*pi/2, -pi/2, pi/2, 3*pi/2];
y2=cos(x2);
plot(x,y)
hold on
plot(x2,y2,'*k')
hold off

Setting Axes Ranges

Sometimes we'd like to adjust the x-values and/or y-values shown.

plot(x,y)
hold on
plot(x2,y2,'dk')
hold off
xlim([-2*pi,2*pi])
ylim([-2,2])

Graphing Lines

For the horizontal line y=1, it doesn't work to just define y=3. You need a y-value of 3 for every x-value in the domain. Thus you can do something like this:

y3=0*x + -1;
plot(x,y,x,y3)
axis([-2*pi,2*pi, -2, 2])

Similarly, you can do it for a vertical line, but for every y-value, define an x-value. You may need to adjust your y-values to get it to work nicely.

yv= -2:2;
xv = 0*yv + 0;
plot(x,y,x,y3,xv,yv,'k')
axis([-2*pi,2*pi, -2, 2])

Or you can have lines be defined by points and connect them (with or without markers).

clear
x=linspace(-10,10);
xvalues = [-10,10];
yvalues = [0,0];
plot(x,3*sin(x),xvalues,yvalues,'k',yvalues,xvalues, 'k')
plot([0,1/2,1/2,0],[0,0,sqrt(3)/2,0],'-o')
axis([-1,1,-1,1])

M-file that created this page

BACK TO MAIN PLOTTING PAGE