3D plot or surf plot problem

Hello all,
I have a problem, trying to solve it for the last two days, but could not succeed. ANY HELP WOULD BE GREATLY APPRECIATED.
I have a data in txt file called 'ecoli'. The first column and first row are wavelength parameters.
The rest of the matrix contains intensity values.
here is what i have done. I have deleted first element in first column and row because it was a X/Y text parameter.
Then i have reduced matrix by deleting first column and row, to get the rest of the intensity value matrix.
X=ecoli(:,1);
>> Y=ecoli(1,:);
>> ind=[1]
ind =
1
>> X(ind)=[]; >> Y(ind)=[]; >> ecoli(:,1)=[]; >> ecoli(1,:)=[]; >> Z=ecoli; >> plot3(X,Y,Z);
I get this error.
??? Error using ==> plot3 Vectors must be the same lengths.
Could somebody through some light on this problem. I know some where the lengths of vectors are not same thats y i could not plot.
Thanks

 Accepted Answer

Ecoli - fun stuff
size(X)
size(Y)
size(Z)
which one is different and why?

18 Comments

> size(X)
ans =
381 1
>> size(Y)
ans =
1 77
>> size(Z)
ans =
381 77
looks like i need to make X,Y into a matrix then plot. Is that correct?
surf(repmat(X,1,77),repamt(Y,381,1),Z)
What Matt said! (only the second repmat to be spelled correctly)
or:
[xx yy] = meshgrid(X,Y);
surf(xx,yy,Z);
Oops, thanks for the catch, Sean de. I didn't go with MESHGRID because the dimensions don't match up. Look at the dims for X,Y,Z.
% Z is 3-by-5.
X = round(rand(3,1)*4);
Y = round(rand(1,5)*200);
[xx,yy] = meshgrid(X,Y)% Not 3-by-5...
I tried it as well. Getting error
??? Error using ==> surf at 78
Data dimensions must agree.
What did you try, there have been two suggestions made in the comments?
Try the repmat solution shown above, making the spelling corrections of course:
surf(repmat(X,1,77),repmat(Y,381,1),Z)
Matt Fig, Both suggestions are leading to the same error!! i executed yours as well as Sean de's one. Still no solution....
perhaps:
surf(repmat(X(:),1,77),repmat((Y(:).'),381,1),Z)
Good catch with the meshgrid as well.
Still same error.... guys if any has idea do let me know plz..
The problem Viswanath is that you're not telling us everything. The above code works on my system:
X = (1:381).';
Y = (1:77);
Z = rand(381,77);
surf(repmat(X(:),1,77),repmat((Y(:).'),381,1),Z)
size(X)
size(Y)
size(Z)
ans =
381 1
ans =
1 77
ans =
381 77
So what is the FULL TEXT of the error message and what are the ACTUAL sizes.
(works for plot3 and mesh as well)
VISWANATH, you have not told us the correct dimensions if you are getting that error. Look at an example using the dimensions you give, just copy and paste:
Xe = round(rand(381,1)*4); % Your X dimensions.
Ye = round(rand(1,77)*300); % Your Y dimensions.
Ze = rand(381,77); % Your Z dimensions.
surf(repmat(Xe,1,77),repmat(Ye,381,1),Ze) % As above.
Hi Sean, the txt file that i gave in a hyperlink is obtained from a spectrometer.
I can not assume a matrix with random numbers for Z with 381 by 77. If you could able to read all the data given in the file and able to plot then let me know. Mean while i will give a few trails with suggestions provided by you guys.
You can email me in detail if you think it is appropriate, viswanath21@gmail.com
When i import ecoli.txt file, its size is 382 by 78. I have to read first row as Y vaue and first column as X value.
At this instant size(X)= 382 by 1, size(Y)= 1by 78.
Later i modify X and Y to 381 by and 1 by 77 respectively by removing first element in X as well as Y because first element is zero.
X and Y are wavelength values in the experiment.
Now i would like delete first column and first row in ecoli so that i get matrix of size 381 by 77, which contains only intensity values.
So i modified original ecoli 382 by 78 file to 381 by 77.
Now i assume Z=ecoli; matrix of size 381 by 77.
I want now to plot surf(X,Y,Z).
I have explained clearly now....if not let me know.
if isequal({size(X) size(Y) size(Z)},{[381 1] [1 77] [381 77]})
[Xgrid,Ygrid] = meshgrid(X,Y);
surf(X,Y,Z') %<-- Transpose because your data has X vertical, Y horizontal
else
disp('Your sizes are not correct.')
end
Oops, I guess I didn't really need to put that meshgrid line in there
Hey Teja, thanks for your help. I just used Z' instead of Z in surf(X,Y,Z'). I got the surface plot. Sorry for messing up myself....Thanks a mil...

Sign in to comment.

More Answers (0)

Categories

Products

Tags

Community Treasure Hunt

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

Start Hunting!