Research Projects
Classes GEOS 293/393 Hawaii Field Course GEOS 436/636 Beyond the Mouse GEOS 602 Geophysical Fields GEOS 620 Geodynamics GEOS 655 Tectonic Geodesy GEOS 692 Geophys. Seminar
Current & Past Students
Student Opportunities
Curriculum Vitae
Recent Publications
Info for Surveyors
Personal Info

Climb higher, beyond the mouse...

Beyond the Mouse LAB 6: MATLAB Plotting Data

October 3, 5

Instructor: Jeff Freymueller

x7286 Elvey 413B jfreymueller@alaska.edu

TA: Shanshan Li

Last Updated: September 30, 2017

Due: Tuesday Oct 10, before class

Lab slides


Exercise 1:

Download these two files and store them in the same directory:

Execute the script such that the figure appears on your screen. It looks a little weird with spikes; like a random fence. They are there because our x values are actually caldendar dates coded as yyyymmdd. We'll take care of that later. For now, I want you to discover the properties of the figure/axes you can change with the property editor: in the figure window menu go to 'edit'->'axes properties' and/or 'figure properties'. Try to find a button that says 'More Properties'; change things and see what happens. Take note of the respective names of the properties; they are similar to what you would use as parameters in get/set. Also try adding a title, and labels for x and y axis. There's nothing to turn in, just keep in mind that basically every figure property you can change in the Figure Editor can be changed from the command line/ your scripts. For example, if you want to get the y axis limits (smallest and largest) values of y, the property name is 'YLim'. You can get the values using:

ylimits = get(gca, 'YLim');

The function gca returns a handle to the current plotting axis, so you can use it whenever you want to get a property of the current axis.

After you have played with the properties for a while, you can make a function that will generate a plot with your chosen properties. In the figure window, choose File->Generate Code... to create a file with a function that will generate your plot, given a set of X and Y values. Save this to a .m file and turn in that file.

Exercise 2:

In this exercise you will start with the simple plotting code given in the example and make a new script that will make a much nicer plot. The exercise is mostly cookbook, just follow the instructions. The parts you will have to figure out are mostly things like converting strings to numbers and vice versa.

Now we're getting a little more serious; the display of the data as shown in the figure is wrong, i.e. does not correspond to the actual timeseries in the file! We' have to correct for this and also make things look nicer. If you check line 5 in fai_temp.m you will see that I plot temps over dates where dates is a vector that holds the dates of temperature measurements in the format 'YYYYMMDD' (check FAI_temps.txt if you don't believe me). Matlab does not know anything about the semantics of the dates vector for the x-axis and assumes dates contains integer values. This is where the weird spaces in your figure come from: we have big gaps from 1980-12-31 to 1981-01-01, i.e. 19801231...19810101, and 19811231 - 19820101, and so on. By default plot connects all data points with a line, which makes it look like the gaps contain real data. Now everybody thinks there's data where you have none.

This becomes clear when you replace line 5 in fai_temp.m with: plot(dates, temps, '.'). Now you can see that the gaps are really gaps. OK. Change it back!

Matlab's internal representation of times is using serial date numbers. Instead of using dates as given in the original file, let's do this:

You might notice that the tick labels are in strange places. Let's try having them every 5th year. There are many ways of doing this. For the most generic one we only need to know that the date format is 'yyyymmdd.' To get tick marks in the style '1985 - 1990 - 1995 ... ' without actually knowing upper and lower bounds of the time series, we can do this (we treat the yyyymmdd dates as actual numbers here):

Alright. Now YOU know that your x-axis tick spacing is 5 years, but it's not really obvious in the figure as the datenumber labels haven't been converted to a reasonable string yet. We should change the tick labels!

Now that we know what we're dealing with we can add title, x, and y labels. I recommend you use '\circF' as part of your ylabel argument to clarify that temperatures are in degrees Fahrenheit (we know that from experience - the numbers in the file certainly aren't degrees Celcius, they remain undocumented though).

If you want to get a better idea about how the temperature evolved over this long time, you could smooth it using a moving average approach over a period of 365 days:

Your final figure should look similar to this:
Fairbanks Intl Airport Temperature data, example

Exercise 3: Setting axes

Now, with very few steps you can add a lot of extra information to that figure. Let's add a spectrogram. Here's what I want you to do: Your final figure should look similar to this:
Fairbanks Intl Airport Temperature data, spectrogrma, example

Turn in your plot, final script and all needed files, and your explanation of what the input arguments for spectrogram mean.

Helpful Matlab Functions:

Here is a list that might be of help.

Dr. Jeffrey T. Freymueller
Professor of Geophysics
Geophysical Institute
University of Alaska, Fairbanks
Fairbanks, AK 99775-7320

jfreymueller -at- alaska.edu
Phone 907-474-7286
Fax 907-474-7290
Office 413B Elvey