Effacer les filtres
Effacer les filtres

Difficulties in axes scaling on matrices: 500 values should be 200 Hz - how to handle?

1 vue (au cours des 30 derniers jours)
Hello community,
As described I have difficulties in scaling axes on 3d (or 2d) plots.
For example I have a 100x500 matrix = A
Due to the resolution in data aquisition I have 100 Values on the time axe y and 500 values on the frequency axe x.
I want an easy way in coding that those 500 values describing 200 Hz, and that those 100 Values describing 6 hours.
Until now I always changed the width of the matrix with a factor, so that I only have 200 values.
if true
% maxfr1=zeros(109,1);
maxfr2=zeros(109,1);
maxfr3=zeros(109,1);
maxfr4=zeros(109,1);
for i1= 1:109
maxfr1(i1,1)=maxidx_smooth1(i1,1)*0.39;
maxfr2(i1,1)=maxidx_smooth2(i1,1)*0.39;
maxfr3(i1,1)=maxidx_smooth3(i1,1)*0.39;
maxfr4(i1,1)=maxidx_smooth4(i1,1)*0.39;
end
end
When I plot a 2d or a 3d graph its shown correctly then. But this is very uncomfortable and erases my higher resolution in data aquisition. Until now I have not found a way to do it easily interactive (change ticks only adds or deletes values but is not changing the whole scale)...
I certainly need help :)
Thank you

Réponse acceptée

Jan
Jan le 10 Sep 2012
Modifié(e) : Jan le 10 Sep 2012
At first you could cleanup the posted code - you do not nee a loop:
maxfr1 = maxidx_smooth1 * 0.39;
maxfr2 = maxidx_smooth2 * 0.39;
maxfr3 = maxidx_smooth3 * 0.39;
maxfr4 = maxidx_smooth4 * 0.39;
It would be even easier, if you store the vectors in one matrix.
But I assume, I do not understand the actual problem.
[EDITED]
It would be clearer, if you post Matlab code, which reproduces your problem. I assume you need to specify the values of the X-direction:
y = rand(50, 10); % Smaller for simplicity
figure
plot(y); % Your problem, x-values are the indices
figure
x = linspace(0, 200, 50);
plot(x, y); % Scaled x-values

Plus de réponses (2)

Florian
Florian le 10 Sep 2012
OK. I try to describe it easier.
I need a 2d plot of a matrix. The matrix has the dimensions 100x500.
I recorded the data in the matrix with 3 values per second for a higher resolution.
If I want to plot the matrix now - the x-axis goes from 0 to 500. Those 500 values representate lets say 200 Hz. So in the plot there shouldn´t be shown the number of values i have - "500" BUT INSTEAD the 200 Hz but on the same location where now "500" is...
If I do change "X-Limits" which is now from 0 to 500 into 0 to 200 it simply just cuts off the rest of the graph. But I want the whole graph displayed just with the x-axis scale 0 to 200.
I hope this was understandable - picture didn´t work.
Thanks
  6 commentaires
Jan
Jan le 11 Sep 2012
Yes.
Set(AxesHandle, 'XData', linspace(0, 200, 50))
The AxesHandle can ge found e.g. by clicking on the axes and using gca afterwards.
Florian
Florian le 11 Sep 2012
Modifié(e) : Florian le 12 Sep 2012
Ok works great now but just for 2d graphs....!!! Thank you very much for your effort !!!

Connectez-vous pour commenter.


Florian
Florian le 12 Sep 2012
Modifié(e) : Florian le 12 Sep 2012
ok as i told you the linspace function works with 2d plots.
but i have another problem with a 3d plot: Please try this
GG2 =rand(109,512);
figure43 = figure(43);
surf(GG2)
figure44 = figure(44);
x = linspace (20,200,2);
surf(x,GG2(:,1),GG2);
I do want the same graph than in figure43 but the x-axis range should go from 20 to 200 and not from 0 to 600.
The figure44 shows nothing...
Is this possible somehow?
Regards,

Community Treasure Hunt

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

Start Hunting!

Translated by