PCA Graph of Data Comes Up Blank

2 次查看(过去 30 天)
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.
clc
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;
end
TS_cat = cat(3,TS{:});
lat = (-90:2.5:90);
lon = (-180:2.5:180);
[Lon,Lat] = meshgrid(lon,lat);
figure
TS_cat = fillmissing(TS_cat,'linear');
imagescn(lon,lat,mean(TS_cat,3))
axis xy
cmocean thermal
xlabel 'longitude'
ylabel 'latitude'
%%
[eof_maps,pc,expv] = eof(TS_cat);
% Plot the first mode:
figure
imagesc(lon,lat,eof_maps(:,:,1))
axis xy image
cmocean('curl','pivot')
title 'The first EOF mode!'
t = length(pc(1,:));
%
figure
% subsubplot(3,1,1)
plot(t,pc(1,:))
box off
axis tight
ylabel 'pc1'
title 'The first principal components'
How would I fix this?
Thanks in advance.

回答(1 个)

Chad Greene
Chad Greene 2021-5-2
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.
  6 个评论
Mike Zimmers
Mike Zimmers 2021-5-2
This is the image that I get when I run
imagesc(sum(isnan(TS_cat),3))
colorbar
I tried to see if changing
TS{k}(TS{k} == -1000) = NaN;
from NaN to 0 in the loop, makes any difference but it gives the same figure.
Mike Zimmers
Mike Zimmers 2021-5-2
I changed
TS{k}(TS{k} == -1000) = NaN;
to
TA{k}(TA{k} <= 0) = NaN;
in the loop and this is the figure that is produced:

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Climate Science and Analysis 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by