How to specify equal distance interval in matlab plots

9 次查看(过去 30 天)
I have a set of data. I want to plot this data at equal intervals but this data is clustered at some location (top and bottom axis). I am using this command (1:3:length(vel)) but this is reading every 3rd data, but at a specific location I want more data and on the other side I want less data. How can I do this?
I have attached a code below mentioning the data and the figure also. In this figure I want less data on both top and bottom (Important to show this also on graph) x-axis while in between the axises I want more data point. How Can I do this.
data = xlsread("hello.xlsx");
vel = data(:,1);
Min = data(:,3);
Mod = data(:,5);
Maj = data(:,7);
Col = data(:,9);
plot(vel,Min,'--k+', 'MarkerSize',7,'linewidth', 1.5,'MarkerIndices',1:3:length(vel))
hold on
plot(vel,Mod,'--bo', 'MarkerSize',7,'linewidth', 1.5,'MarkerIndices',1:4:length(vel))
plot(vel,Maj,'--gs', 'MarkerSize',7,'linewidth', 1.5,'MarkerIndices',1:5:length(vel))
plot(vel,Col,'--r*', 'MarkerSize',7,'linewidth', 1.5,'MarkerIndices',1:6:length(vel))
hold off
%grid on
Thanks in advance...

采纳的回答

Antoni Garcia-Herreros
Hello,
You could try something like this:
data = xlsread("hello.xlsx");
vel = data(:,1);
Min = data(:,3);
Mod = data(:,5);
Maj = data(:,7);
Col = data(:,9);
step=20; %Sets the space between the non-important data
th=0.001; % Threshold to accept the minimum distance between consecutive points
Diff_Min=Min(1:numel(Min)-1,1)-Min(2:numel(Min),1); %Array storing the difference between consecutive points
i_Min_first=find(abs(Diff_Min)>th,1); % First index with a difference larger than the threshold
i_Min_last=find(abs(Diff_Min)>th,1,'last'); % Last index with a difference larger than the threshold
V_Min=[vel(1:step:i_Min_first);vel(i_Min_first+1:i_Min_last);vel(i_Min_last+1:step:end)]; %vel array with the values of the 3 regions
Y_Min=[Min(1:step:i_Min_first);Min(i_Min_first+1:i_Min_last);Min(i_Min_last+1:step:end)]; %Min array with the values of the 3 regions
Diff_Mod=Mod(1:numel(Mod)-1,1)-Mod(2:numel(Mod),1);
i_Mod_first=find(abs(Diff_Mod)>th,1);
i_Mod_last=find(abs(Diff_Mod)>th,1,'last');
V_Mod=[vel(1:step:i_Mod_first);vel(i_Mod_first+1:i_Mod_last);vel(i_Mod_last+1:step:end)];
Y_Mod=[Mod(1:step:i_Mod_first);Mod(i_Mod_first+1:i_Mod_last);Mod(i_Mod_last+1:step:end)];
Diff_Maj=Maj(1:numel(Maj)-1,1)-Maj(2:numel(Maj),1);
i_Maj_first=find(abs(Diff_Maj)>th,1);
i_Maj_last=find(abs(Diff_Maj)>th,1,'last');
V_Maj=[vel(1:step:i_Maj_first);vel(i_Maj_first+1:i_Maj_last);vel(i_Maj_last+1:step:end)];
Y_Maj=[Maj(1:step:i_Maj_first);Maj(i_Maj_first+1:i_Maj_last);Maj(i_Maj_last+1:step:end)];
Diff_Col=Col(1:numel(Col)-1,1)-Col(2:numel(Col),1);
i_Col_first=find(abs(Diff_Col)>th,1);
i_Col_last=find(abs(Diff_Col)>th,1,'last');
V_Col=[vel(1:step:i_Col_first);vel(i_Col_first+1:i_Col_last);vel(i_Col_last+1:step:end)];
Y_Col=[Col(1:step:i_Col_first);Col(i_Col_first+1:i_Col_last);Col(i_Col_last+1:step:end)];
plot(V_Min,Y_Min,'--k+', 'MarkerSize',7,'linewidth', 1.5)
hold on
plot(V_Mod,Y_Mod,'--bo', 'MarkerSize',7,'linewidth', 1.5)
plot(V_Maj,Y_Maj,'--gs', 'MarkerSize',7,'linewidth', 1.5)
plot(V_Col,Y_Col,'--r*', 'MarkerSize',7,'linewidth', 1.5)
hold off
  1 个评论
Raj Arora
Raj Arora 2023-3-29
Thanks antoni, I understood what you are doing, basically dividing each plot into 3 different sections and then plotting those. Initially I also thought in the same way but not able to implement it. Thanks once again.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Visual Exploration 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by