; 2012 | Michael Ian Lapsley

Save figures to PDF in MATLAB (or octave)

I used to use a program that someone developed called fig_setpdf.m, which gives some options about saving to a pdf. More recently I found that you can simply use the print command to generate a pdf. This does not give the options of fig_setpdf, but it can be easily implemented. (In fact that is how fig_setpdf works)

Here is a simple example of how to create a pdf from the current figure.

        Psize = ([85 70]/25.4)
        set(gcf,'PaperSize',Psize,'PaperPosition',[0 0 Psize])
        print('Plots135k/Simulation_135k','-dpdf')

Notes on using the Latex PhD thesis template

Later I will add the getting started details.

%
It took me a while to get figures into the document. Tiff images cannot be used. Do not use spaces in the figure name. Here is the syntax:

%%%
\begin{figure}[htb]
\centering
\includegraphics[width = 5.8in]{Chapter-2/Figures/Figure_2-1.png}
\caption{caption text.}
\label{ChX-figure: FigureLabel}
\end{figure}
%%%
%

%
I had to add: '\usepackage{fixltx2e}' to the preample of the disertation file to use subscripts. To add a subscript with this package use: '\textsubscript{text to be a subscript}'
%

%
Added '\usepackage[sectionbib]{chapterbib}' to the preamble of the disertation file to allow for a bibliography at the end of each chapter. Each bibliography can use a seperate .bib file. There was an issue at the begining. It was doing very strange things when I made changes. I realized that the YourName-Disertation.aux file needed to be deleted before compiling changes to the bib.

This would not work for me unless all of the .tex files and .bib files were in the main folder with the main dissertation.tex file. It was not necessary to compile the documents separately or multiple times. This never helped.
Still need to delete the .aux file before changes will work.

To compress and sort the references I used this:

\usepackage[square,numbers,sectionbib,sort&compress]{natbib}
\usepackage[sectionbib]{chapterbib}

The order of declaration can effect the performance of the file.
remember to delete the aux files before running.
%

%
 I had to use:

'\usepackage[pdftex,bookmarks= true]{hyperref}'

to add bookmarks to the pdf. Does not work.
%

[Matlab] Figure and axis options

In Matlab, if you type get(gcf) of get(gca) you will get a list of the current properties of the given axis or figure. Also, set(gcf) or set(gca) will list all available properties and the legal options you can set. This is true for other objects also. I tend to use figures and axes regularly and forget these option and so I am listing them here.

set(gcf):  
 
Alphamap
    CloseRequestFcn: string -or- function handle -or- cell array
    Color
    Colormap
    CurrentAxes
    CurrentCharacter
    CurrentObject
    CurrentPoint
    DockControls: [ {on} | off ]
    FileName
    IntegerHandle: [ {on} | off ]
    InvertHardcopy: [ {on} | off ]
    KeyPressFcn: string -or- function handle -or- cell array
    KeyReleaseFcn: string -or- function handle -or- cell array
    MenuBar: [ none | {figure} ]
    Name
    NextPlot: [ new | {add} | replace | replacechildren ]
    NumberTitle: [ {on} | off ]
    PaperUnits: [ {inches} | centimeters | normalized | points ]
    PaperOrientation: [ {portrait} | landscape | rotated ]
    PaperPosition
    PaperPositionMode: [ auto | {manual} ]
    PaperSize
    PaperType: [ {usletter} | uslegal | A0 | A1 | A2 | A3 | A4 | A5 | B0 | B1 | B2 | B3 | B4 | B5 | arch-A | arch-B | arch-C | arch-D | arch-E | A | B | C | D | E | tabloid | <custom> ]
    Pointer: [ crosshair | fullcrosshair | {arrow} | ibeam | watch | topl | topr | botl | botr | left | top | right | bottom | circle | cross | fleur | custom | hand ]
    PointerShapeCData
    PointerShapeHotSpot
    Position
    Renderer: [ {painters} | zbuffer | OpenGL | None ]
    RendererMode: [ {auto} | manual ]
    Resize: [ {on} | off ]
    ResizeFcn: string -or- function handle -or- cell array
    SelectionType: [ normal | open | alt | extend ]
    ToolBar: [ none | {auto} | figure ]
    Units: [ inches | centimeters | normalized | points | {pixels} | characters ]
    WindowButtonDownFcn: string -or- function handle -or- cell array
    WindowButtonMotionFcn: string -or- function handle -or- cell array
    WindowButtonUpFcn: string -or- function handle -or- cell array
    WindowKeyPressFcn: string -or- function handle -or- cell array
    WindowKeyReleaseFcn: string -or- function handle -or- cell array
    WindowScrollWheelFcn: string -or- function handle -or- cell array
    WindowStyle: [ {normal} | modal | docked ]
    WVisual: { 00 (RGB 32  GDI, Bitmap, Window) }
  01 (RGB 32 bits(08 08 08 08) zdepth  0, Hardware Accelerated, Opengl, Window)
  02 (RGB 32 bits(08 08 08 08) zdepth  0, Hardware Accelerated, Opengl, Double Buffered, Window)
  03 (RGB 32 bits(08 08 08 08) zdepth 16, Hardware Accelerated, Opengl, Window)
  04 (RGB 32 bits(08 08 08 08) zdepth 16, Hardware Accelerated, Opengl, Double Buffered, Window)
  05 (RGB 32 bits(08 08 08 08) zdepth 24, Hardware Accelerated, Opengl, Window)
  06 (RGB 32 bits(08 08 08 08) zdepth 24, Hardware Accelerated, Opengl, Double Buffered, Window)
  07 (RGB 32 bits(08 08 08 00) zdepth 32, Generic, Opengl, GDI, Bitmap, Window)
  08 (RGB 32 bits(08 08 08 00) zdepth 16, Generic, Opengl, GDI, Bitmap, Window)
  09 (RGB 32 bits(08 08 08 00) zdepth 32, Generic, Opengl, Double Buffered, Window)
  10 (RGB 32 bits(08 08 08 00) zdepth 16, Generic, Opengl, Double Buffered, Window)
  11 (RGB 32 bits(08 08 08 08) zdepth 32, Generic, Opengl, GDI, Bitmap, Window)
  12 (RGB 32 bits(08 08 08 08) zdepth 16, Generic, Opengl, GDI, Bitmap, Window)
  13 (RGB 32 bits(08 08 08 08) zdepth 32, Generic, Opengl, Double Buffered, Window)
  14 (RGB 32 bits(08 08 08 08) zdepth 16, Generic, Opengl, Double Buffered, Window)

    WVisualMode: [ {auto} | manual ]

    ButtonDownFcn: string -or- function handle -or- cell array
    Children
    Clipping: [ {on} | off ]
    CreateFcn: string -or- function handle -or- cell array
    DeleteFcn: string -or- function handle -or- cell array
    BusyAction: [ {queue} | cancel ]
    HandleVisibility: [ {on} | callback | off ]
    HitTest: [ {on} | off ]
    Interruptible: [ {on} | off ]
    Parent
    Selected: [ on | off ]
    SelectionHighlight: [ {on} | off ]
    Tag
    UIContextMenu
    UserData
    Visible: [ {on} | off ]

--------------------------------------------------------------------------------------------------------

set(gca):

    ActivePositionProperty: [ position | {outerposition} ]
    ALim
    ALimMode: [ {auto} | manual ]
    AmbientLightColor
    Box: [ on | {off} ]
    CameraPosition
    CameraPositionMode: [ {auto} | manual ]
    CameraTarget
    CameraTargetMode: [ {auto} | manual ]
    CameraUpVector
    CameraUpVectorMode: [ {auto} | manual ]
    CameraViewAngle
    CameraViewAngleMode: [ {auto} | manual ]
    CLim
    CLimMode: [ {auto} | manual ]
    Color
    ColorOrder
    DataAspectRatio
    DataAspectRatioMode: [ {auto} | manual ]
    DrawMode: [ {normal} | fast ]
    FontAngle: [ {normal} | italic | oblique ]
    FontName
    FontSize
    FontUnits: [ inches | centimeters | normalized | {points} | pixels ]
    FontWeight: [ light | {normal} | demi | bold ]
    GridLineStyle: [ - | -- | {:} | -. | none ]
    Layer: [ top | {bottom} ]
    LineStyleOrder
    LineWidth
    MinorGridLineStyle: [ - | -- | {:} | -. | none ]
    NextPlot: [ new | add | {replace} | replacechildren ]
    OuterPosition
    PlotBoxAspectRatio
    PlotBoxAspectRatioMode: [ {auto} | manual ]
    Projection: [ {orthographic} | perspective ]
    Position
    TickLength
    TickDir: [ {in} | out ]
    TickDirMode: [ {auto} | manual ]
    Title
    Units: [ inches | centimeters | {normalized} | points | pixels | characters ]
    View
    XColor
    XDir: [ {normal} | reverse ]
    XGrid: [ on | {off} ]
    XLabel
    XAxisLocation: [ top | {bottom} ]
    XLim
    XLimMode: [ {auto} | manual ]
    XMinorGrid: [ on | {off} ]
    XMinorTick: [ on | {off} ]
    XScale: [ {linear} | log ]
    XTick
    XTickLabel
    XTickLabelMode: [ {auto} | manual ]
    XTickMode: [ {auto} | manual ]
    YColor
    YDir: [ {normal} | reverse ]
    YGrid: [ on | {off} ]
    YLabel
    YAxisLocation: [ {left} | right ]
    YLim
    YLimMode: [ {auto} | manual ]
    YMinorGrid: [ on | {off} ]
    YMinorTick: [ on | {off} ]
    YScale: [ {linear} | log ]
    YTick
    YTickLabel
    YTickLabelMode: [ {auto} | manual ]
    YTickMode: [ {auto} | manual ]
    ZColor
    ZDir: [ {normal} | reverse ]
    ZGrid: [ on | {off} ]
    ZLabel
    ZLim
    ZLimMode: [ {auto} | manual ]
    ZMinorGrid: [ on | {off} ]
    ZMinorTick: [ on | {off} ]
    ZScale: [ {linear} | log ]
    ZTick
    ZTickLabel
    ZTickLabelMode: [ {auto} | manual ]
    ZTickMode: [ {auto} | manual ]

    ButtonDownFcn: string -or- function handle -or- cell array
    Children
    Clipping: [ {on} | off ]
    CreateFcn: string -or- function handle -or- cell array
    DeleteFcn: string -or- function handle -or- cell array
    BusyAction: [ {queue} | cancel ]
    HandleVisibility: [ {on} | callback | off ]
    HitTest: [ {on} | off ]
    Interruptible: [ {on} | off ]
    Parent
    Selected: [ on | off ]
    SelectionHighlight: [ {on} | off ]
    Tag
    UIContextMenu
    UserData
    Visible: [ {on} | off ]

[Matlab] Colors and Symbols for ploting in loops

Sometimes it is easier to use a loop to plot something rather than manually typing plot many times. The problem is that all of the lines will have the same color and all the symbols will be the same. This code easily applies color to plots in a loop.


[Matlab] User Interface Functions

One easy method for creating a user interface is a question dialog. This can easily be used with the switch function to run different sections of code.

SelectFunction = questdlg('What do you want to do?', ...
                'Select Function', ...
                'Get data from images', 'Get Amplitude information from data','Plot displacement vs. time','Get data from images');
switch SelectFunction
   
%% Input data from images
    case 'Get data from images'

      'Stuff'
    
    case 'Get Amplitude information from data'
      'more stuff'

A more complex but useful process is this:

function UserInterfaceExample

% User Interface Example
% Creates a box with buttons which execute functions
 
    clear;clc;close all;
    height = 250;
    width = 200;
    figure
    set(gcf,'Position',[1000 height+200 width height],'Menubar','none')
   
    uicontrol('Style', 'pushbutton', 'String', 'Say Hi',...
            'Position', [50 height-50 100 20],...
            'Callback', @Function1);
   
    uicontrol('Style', 'pushbutton', 'String', 'Say Bye',...
        'Position', [50 height-100 100 20],...
        'Callback', @Function2);
   
    uicontrol('Style', 'pushbutton', 'String', 'Draw a Line',...
        'Position', [50 height-150 100 20],...
        'Callback', @Function3);
   
    uicontrol('Style', 'pushbutton', 'String', 'Draw Shapes',...
        'Position', [50 height-200 100 20],...
        'Callback', @Function4);
end

function Function1(src,evt)
    clear;clc;close all;
    fprintf('HI')

end

function Function2(src,evt) 
    clear;clc;close all;
    fprintf('Bye!') 
end
    
function Function3(src,evt)

    clear;clc;close all; 
    figure
    line([2 5],[2 5])
end

function Function4(src,evt)
    clear; clc; close all;
    figure
    rectangle('Position',[200 200 300 500],'Curvature', [0 0])
    rectangle('Position',[10 10 300 500],'curvature',[1,1])
    axis square

end


other functions:

uicontrol
uigetdir
uigetfile
inputdlg
errordlg
helpdlg
listdlg
msgbox
questdlg
uiresume
uiwait
warndlg
end

[Matlab] Adding ASCII Charecters for abvanced ploting

Some times in Matlab one may want to add some charecter in the code. Here is an example:

Lets say you want to plot several variables with similar names (like A1, A2, A3) using a for loop as such:

A1 = 0:5;
A2 = 5:10;
A3 = 10:15;
for i = 1:3
    eval(['plot(A',num2str(i),')'])
    hold on
end

This will work but all of your plots will have the same line type, symbol color etc. Now it you want to add different colors to a plot you can use strings to define the colors. But using the eval function creates problems because you must create a string within a string. usually you can use this notation:

String = 'Here is another "string" in this string'

However with the eval function this does not work for me. However, ASCII charecters can be created using the char command. So to add colors to the plot:


A1 = 0:5;
A2 = 5:10;
A3 = 10:15;

colors = [1 0 0; 0 1 0; 0 0 1];
for i = 1:3
    eval(['plot(A',num2str(i),',',char(039),'color',char(039),',colors(i,:))'])
    hold on
end

A list of ASCII character codes are found here:
http://www.asciitable.com/

use the char() command to insert the charecters

Here is a good list of colors and symbols to use with these plots:

symbol = {'o','s','^','v','<','>','d','p'};
colors = [  0   0   0
            0.8 0   0
            1   0   0
            1   0.6 0
            0   0.6 0
            0   0   1
            0   0   0.6
            0.8 0   0.8
                        ];