none.
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. 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.
Now we're getting a little more serious; the display of the data as shown in the figure wrong, i.e. does not correspond to the
actual timeseries in the file! We've got to correct for this and 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. Matlab assumes those gaps
are values and plots a continuous x-axis which results in it reserving space on the x-axis. That's not wrong and also not too bad, but by default plot
connects all data points with a line. 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, '.')
. Understood? OK. Change it back!
Let's fix this now! 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:
dates
from integer representation into strings using num2str
datenum
, and the formatting
string 'yyyymmdd'. Save this to a variable d_nums
plot(dates, temps)
; replace dates
with the serial
date numbers you just calculated. You should get a nice sinusoidal temperature series.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 actuall knowing upper and lower bounds of the time series, we can do this (we treat the yyyymmdd dates as actual numbers here):
min
on dates
, to find minumum of the timeseries floor
.max
and ceil
instead of min
and floor
set(gca, 'XTick', ticks)
to set your tickmarks on the x-axis to
the dates you desired. (Well, it's really just me desiring that, I know)axis tight
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!
set
just like above, but this time change the property 'XTickLabel'
to the result of calling datestr
on the serial date number array ticks
you
create above.datestr
OR
giving a freeform format similar to 'yyyy-mm-dd'
. See datestr
documentation for
details. Play with different formats and find one you like.
Great, now that we know what we're dealing with we can add title, x, and y labels. I recommend you to
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).
title,xlabel,ylabel
calls, set the 'FontSize' to 12title
call, also set the 'FontWeight' to 'bold'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:
smooth
function which is part of the Curve Fitting Toolbox to temps
and
give the respective span
to 365. d_nums
hold on
legend
Your final figure should look similar to this:
axes
fai_spec.m
plot
command, add an axes
call in which you set the position property to something
reasonable. Make the height of the axes not larger than 30% of the figure. I positioned my axes 10% from the left border, 65% from the bottom,
made it 89% wide and 30% high - the percentages are in relation to the figure dimensions.spectrogram(temps, 180, 90, 128, 1/(24*60*60), 'yaxis')
. Briefly explain what the
parameters of this command mean (it's sometimes very useful to look at timeseries this way).Here is a list that might be of help.
axes
ceil
datenum
: Convert a string into a serial date numberdatestr
: Convert a serival date number into a formatted date stringfloor
max
min
set
, get
graphics' handle propertiesxlabel
, ylabel
, title
spectrogram
: Have a spectrogram plottedsmooth
: moving averageronni <at> gi <dot> alaska <dot> edu | Last modified: February 01 2013 21:41.