inserting long xtick label

4 visualizzazioni (ultimi 30 giorni)
TESFALEM ALDADA
TESFALEM ALDADA il 7 Mar 2020
Modificato: dpb il 8 Mar 2020
Hi,
I wanted to insert long time series of xticklabel for my plot.
I tried manually using:
set(gca, 'xticklabels' ,{'1/1/1990', '1/2/1990', '3/1/1990', . . . since the date length is long (15 years) i could not type all time series. so what is the short cut to inser this xtick?
Thank you
  2 Commenti
Star Strider
Star Strider il 7 Mar 2020
See the documentation for plot timeseries.
The other option (if you did not use a datetime array) is to use the datetick function.
TESFALEM ALDADA
TESFALEM ALDADA il 8 Mar 2020
Modificato: dpb il 8 Mar 2020
ok, i am working to plot using the left and right axis where this method is not woking for me.
furthermore it shows error message when i use a set(gca, ...) option to further process,
maybe see below please
yyaxis left
ts1 = timeseries(Qobs,1:4383);
ts1.Name = 'Daily Count';
ts1.TimeInfo.Units = 'days';
ts1.TimeInfo.StartDate = '01-Jan-2000'; % Set start date.
ts1.TimeInfo.Format = 'mmm dd, yy'; % Set format for display on x-axis.
ts1.Time = ts1.Time - ts1.Time(1); % Express time relative to the start date.
hL=plot(X,Qobs, 'g', X,Qsim);
ylabel('Flow (m^3/s)')
xlabel('Daily flow')
% legend('Observed','Simulated')
% hL.FaceColor = [1 0 0];
set(gca,'xtick',1:4383,'ylim', [0,12])
plot(ts1)
yyaxis right
hR=bar(X,P,5, 'k'); %
set(gca,'YColor', 'k','Ydir','reverse','ylim',[0,50],'xlim',[1,4383], 'xtick',1:500:4383)
ylabel('Rainfall (mm)')
xlim([1 4383])

Accedi per commentare.

Risposta accettata

dpb
dpb il 7 Mar 2020
Modificato: dpb il 8 Mar 2020
Don't label manually at all; use a datetime variable for the x-axis variable in plot() and you'll get datetime ticklabels automagically.
ADDENDUM:
t=1:4383; t=t.';t=t-t(1); % number days vector
Qobs=randn(size(t)); % dummy data to match
ts1 = timeseries(Qobs,t); % create the ts object
ts1.TimeInfo.Units='days';
ts1.TimeInfo.StartDate='01-Jan-2000';
ts1.TimeInfo.Format='mmmyy'; % bug/implementation issue -- uses datenum() strings internally
plot(ts1)
hAx=gca;
xl=xlim; % retrieve xlimits
xl(2)=xl(2)+days(1); % make RH axis end at 1/1 next year
xlim(xl) % update xlim, now draws last tick label
produced
Finish up as desired.
Not knowing what X is, no way to know what to do about adding a bar plot at this point...
NB: The bug/implementation snafu on the TS date format string. Setting it to 'MMMyy' as is correct for datetime object produced warning/error when tried to plot as
>> plot(ts1)
Error using matlab.internal.datetime.cnv2icudf (line 157)
Unrecognized minute format. Format: MMMyy.
Error in timeseries/plot (line 142)
datetimeTickFormat = matlab.internal.datetime.cnv2icudf(char(h.TimeInfo.Format));
>>
Cap-M is minute field for datenum variables, NOT datetime class which is what the timeseries and new-fangled DatetimeRuler object is for the datetime aware plot functions. In fact, after the plot() line above,
>> hAx.XAxis
ans =
DatetimeRuler with properties:
Limits: [Jan 01, 2000 Jan 01, 2012]
TickValues: [Jan 01, 2000 Jan 01, 2002 Jan 01, 2004 Jan 01, 2006 Jan 01, 2008 Jan 01, 2010 Jan 01, 2012]
TickLabelFormat: 'MMMyy'
Show all properties
>>
shows it was converted.
  1 Commento
TESFALEM ALDADA
TESFALEM ALDADA il 8 Mar 2020
i tried this way but it dont works for daily time frames. please can you give me some example, and also i have two axis plot; one using plot function and the other axis has bar plot.
how can i adjust for this.
best

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

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

Start Hunting!

Translated by