I do not want to plot the 0 components of my vector; how do I remove these components without effecting the length of the vector?

68 次查看(过去 30 天)
I want to plot energy as a function of time. Using the plot function this is simple; however my graph diverges to 0 due to the 0 elements in my energy-vector. How do I remove these zeros without effecting the length of the vector?
I have tried using the following function, however this simply eliminates the zeros and causes one vector to be shorter than the other, which does not allow me to create a plot:
Energy(Energy==0) = [];
I am relatively new to Matlab so perhaps I am missing something simple. I have also attached an example of the type of plot I am getting which you will find clearly jumps to zero.
Thanks in advance!

采纳的回答

dpb
dpb 2015-1-15
编辑:dpb 2015-1-16
For plotting, use
Energy(Energy==0) = nan;
instead. plot and friends ignore NaN entries altho if you're doing calculations on the values they will propagate thru those so you'll have to deal with them.
The alternate way if the zero values are really of no consequence is to fixup both arrays
ix=(Energy==0); % get the logical vector of zero locations
Energy(ix)=[]; % remove those from that array
time(ix)=[]; % and from the time vector, too.
Or, yet another workaround
ix=(Energy~=0); % this time keep the desired indices
plot(t(ix),Energy(ix)) % plot only those particular ones
This latter is also how to do computations on just the selected portion but not actually modify the underlying data arrays.

更多回答(1 个)

Zoltán Csáti
Zoltán Csáti 2015-1-15
Use
Energy(Energy == 0) = NaN;
It will not shorten the length of the vector, but will not be displayed on the graph.
  2 个评论
Ghansyam Vadodaria
Ghansyam Vadodaria 2020-1-29
编辑:dpb 2020-1-29
hello,
i want to draw graph of store data on dat file but in this data some zeros are available. i want to continue my graph but dont want discontinuety, and also plot smooth graph. but discontinuty occure how can i solve this??
please follow the given programm and figure..
ackley=importdata('E:\codeblock\9\Ackley_error\student.dat');
Y_Axis =length(ackley);
Y_Axis = Y_Axis + 1;
Aplot=ackley;
Aplot(Aplot==0)=NaN; % replace 0 elements with NaN
t=1:length(ackley);
semilogy(t,ackley,'-g','LineWidth',2,'LineStyle','-');
hold on
legend('Aplot','student');
dpb
dpb 2020-1-29
As noted previously, NaN elements are simply ignored by plot() and friends resulting in "holes" in a drawn line. If this isn't what you want, then the alternative is as also shown in my response above is to only select the nonzero elements.
In the code you posted above, the lines
Aplot=ackley;
Aplot(Aplot==0)=NaN; % replace 0 elements with NaN
are superfluous as you never use the Aplot variable. For a semilogy() plot, the effect in the end is the same as one can't take the log() of zero so semilogy ignores those points as well.
There is no way to plot zeros on logarithmic scale so the choice is to either make them very, very small but positive in which case they'll show up on the plot as elements that won't be on the path of the other data you do have or select only the data for which y ~= 0 and plot it instead.
From my above Answer
ix=(Energy~=0); % this time keep the desired indices
plot(t(ix),Energy(ix)) % plot only those particular ones
following the same pattern w/ your variables and for a semilogy plot would be
...
ix=(ackley~=0); % this time keep the desired indices
semilogy(t(ix),ackley(ix),'-g','LineWidth',2,'LineStyle','-');
...
You don't show what created the line for student so didn't try to reproduce it but similar logic holds.

请先登录,再进行评论。

类别

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

产品

Community Treasure Hunt

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

Start Hunting!

Translated by