MATLAB Answers

PCA Graph of Data Comes Up Blank

2 views (last 30 days)
Mike Zimmers
Mike Zimmers on 2 May 2021
Commented: Mike Zimmers on 2 May 2021
I am running an example code from the Climate Data Toolbox and I am having issues plotting the graph of the principle component of my data. When I run the code, it is resulting in a blank graph. The data is the file attached. The following is my code.
close all
clear all
%% TS
filename = 'data';
S = dir(fullfile(filename,'*.txt'));
for k = 1:numel(S)
fnm = fullfile(filename,S(k).name);
mtx1 = load(fnm);
mtx1 = normalize(mtx1);
mtx = reshape(mtx1,72,144);
TS{k} = mtx;
TS{k}(TS{k} == -1000) = NaN;
TS_cat = cat(3,TS{:});
lat = (-90:2.5:90);
lon = (-180:2.5:180);
[Lon,Lat] = meshgrid(lon,lat);
TS_cat = fillmissing(TS_cat,'linear');
axis xy
cmocean thermal
xlabel 'longitude'
ylabel 'latitude'
[eof_maps,pc,expv] = eof(TS_cat);
% Plot the first mode:
axis xy image
title 'The first EOF mode!'
t = length(pc(1,:));
% subsubplot(3,1,1)
box off
axis tight
ylabel 'pc1'
title 'The first principal components'
How would I fix this?
Thanks in advance.

Answers (1)

Chad Greene
Chad Greene on 2 May 2021
I think you're mixing and matching different ways of defining filenames. As a result, dir is unable to find the files you're looking for.
When I ran your code, this came up empty:
S = dir(fullfile(filename,'*.txt'));
The easiest solution is to navigate directly to the folder where all of your .txt files are, and do
S = dir('*.txt');
I was able to get around all of this by manually writing the filename in this line:
mtx1 = load('data.txt');
But that of course only loads the single example file you uploaded. As a result, pc only contains one entry, becauese there's only one timestep.
Mike Zimmers
Mike Zimmers on 2 May 2021
I changed
TS{k}(TS{k} == -1000) = NaN;
TA{k}(TA{k} <= 0) = NaN;
in the loop and this is the figure that is produced:

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!