How to remove dates in graph ?

9 Ansichten (letzte 30 Tage)
Anshul Choubey
Anshul Choubey am 20 Mär. 2020
Bearbeitet: dpb am 22 Mär. 2020
I want to plot a graph for two sepcific dates together as one series(i.e 13th Feb and 28th Feb), but as data was taken at same period between 9.30 am to 15.00 pm. I am getting following plot.
In order to get a graph for two dates together I used following code and getting an error.
Date1=NewP{:,"Date"}+NewP{:,"Time"};
Date1.Format='dd/MM/yyyy HH:mm:ss'
NewP.Date=Date1
plot(NewP{:,"Date"},NewP{:,"MeltCushion"})
ax=gca;
ax.XAxis
dstart=NewP{1,"Date"};
dend=NewP{end,'Date'};
xlim([dstart dend]);
ax.XAxis.TickValues=1:10:length(NewP{:,"Date"})
Error using matlab.graphics.axis.decorator.DatetimeRuler/validateTicks
Value must be a vector of increasing datetime values.
Error in matlab.graphics.axis.decorator.DatetimeRuler/setTicksDelegate
How do I remove the linear line between the two dates? I tried xticks for datetime and its showing the same error.

Antworten (2)

dpb
dpb am 20 Mär. 2020
The error
ax.XAxis.TickValues=1:10:length(NewP{:,"Date"})
Error using matlab.graphics.axis.decorator.DatetimeRuler/validateTicks
Value must be a vector of increasing datetime values.
comes from the use of the value '10' -- the XAxis is a DateTimeRuler object as it says in the error message because you used a datetime as ordinate variable. Presuming the 10 is intended as 10 days you need
ax.XAxis.TickValues=1:days(10):length(NewP{:,"Date"})
instead.
To eliminate the line between the two data sets, the simplest thing to do would be to plot the two sets independently instead of joining them:
figure
plot(P1{:,"Date"},P1{:,"MeltCushion"}
hold on
plot(P2{:,"Date"},P2{:,"MeltCushion"}
where I used P1 and P2 as placeholder variables for your first two variables as used in the first example plot. The only difference is to use the date variable instead of just the time variable as you did there and not joining the two data sets together. You'll also get a color difference automagically, you can set the line color as desired if want them the same.
The problem you'll still have will be that as in your present second graph, the data in each day itself is going to be almost indistinguishable as just a smudge because the time difference between the two dates is so large compared to the time within the day so the linear axis scale isn't appropriate for the detail.
An alternate would be to use an arbitrary day difference between the two and then adjust the tick labels to reflect actual dates if those are important.
  2 Kommentare
Anshul Choubey
Anshul Choubey am 21 Mär. 2020
Bearbeitet: Anshul Choubey am 21 Mär. 2020
hey thank you for your answer. Basically, my aim is to see the trend. I wanted to apply the moving average on data at two different dates. I want to see, if the melt cushion value showing a decrease in trend, as machine is being runned. I applied the above code, and dates are still far apart. Instead I plotted a graph with the index. In order to show the different dates, I use different color on same plot.
x1=[1:999]'
pmelt=NewP{:,'MeltCushion'}
plot(x1,pmelt)
mv=movmean(NewP{:,"MeltCushion"},20)
hold on
plot(x1,mv)
dpb
dpb am 21 Mär. 2020
Bearbeitet: dpb am 22 Mär. 2020
" I applied the above code, and dates are still far apart."
Yes, that's what I specifically commented on that you've got one day of data for each day of data 10 days apart -- if you plot that on absolute time, then you've got an overall axis that is 12 days long and only 2/12 --> ~17% of it contains the pertinent data...
If the actual day itself isn't of particular importance, you could use just one day duration from the beginning of the first day as the initial date/time of the second which is, in essence the same thing as plotting vs ordinal position except you would have a time axes. Of course, the absolute time wouldn't be the actual days but you could handle that by futzing with the tick labels or otherwise label the two datasets with legend or annotation
You don't say whether you're satisfied by simply using the ordinal position or not...the alternative you might try would be to use the duration from beginning of each data series as the ordinate but add a fixed offset to one of the response variables so that it is plotted directly above the other but doesn't overlay it.
Or, you could consider using subplot(2,1,n) and plot each into a different axis on the same figure.
If the point is just trends, then offsetting one versus the other won't change the slopes; only the magnitude/intercept of a trend line.

Melden Sie sich an, um zu kommentieren.


darova
darova am 20 Mär. 2020
Try this
ix = min(xred) < xblue & xblue < max(xred);
plot(xred,reddata,'r')
hold on
plot(xblue(ix),bluedata(ix),'b')

Kategorien

Mehr zu Log Plots finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by