#author("2018-07-25T21:58:04+09:00","default:Miyashita","Miyashita") #author("2018-07-25T21:58:30+09:00","default:Miyashita","Miyashita") *目盛を日付・時刻で表示 & ラベルの改行 [#j4033528] **はじめに [#se86c9a7] datetime型をplot等の軸に採用すると,自動で軸目盛りのラベルが日付表示になる.~ ただし目盛り位置やラベルのフォーマットを自由に編集したい場合はdatenumのシリアル日付値を使った方が便利.~ 下記のようにサンプルデータを作成した.~ #codeprettify(lang-matlab){{ % サンプル日時の行列を作成 % 1990/06/01 12:00 〜 1992/06/01 12:00 % 毎月1日の12:00の25要素 Y = [repmat(1990,[1 7]) repmat(1991,[1 12]) repmat(1992,[1 6])]; M = [6:12 1:12 1:6]; D = ones(1,25); h = 12*ones(1,25); m = zeros(1,25); s = zeros(1,25); date_vec = vertcat(Y,M,D,h,m,s)'; }} #codeprettify(lang-matlab){{ % 25個の日時をdatetime型, シリアル値に変換 t = datetime(date_vec); tn = datenum(date_vec); % plot用に適当なデータを作成 A = peaks(25); y = A(:,10); }} **datetick [#gb99c508] シリアル値でplotすると,最初はシリアル値のまま.~ datetickで,シリアル値の軸を日付に設定できる. #codeprettify(lang-matlab){{ % plot figure plot(tn,y,'bo-') grid on % 目盛位置の設定 tick = datenum(date_vec(1:6:end,:)); set(gca,'XTick',tick) % datetickでフォーマット指定 datetick('x','mm/dd HH:MM','keeplimits','keepticks') }} keeplimitsとkeepticksで実行する前の軸範囲と目盛り位置を固定する.~ xlimやXTickを指定した後にdatetickを行わないとややこしいことになる.~ これで下図のように日付表示にできる.~ &ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/MATLAB/tick_datenum.png,480x437); &ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/MATLAB/datetick_x.png,480x437); **datetickを使わずに目盛ラベルを表示し,改行する[#y23a0e0a] 目盛り間隔やラベルのフォーマットによっては目盛ラベルが前後の文字と重なることもある.~ datetickではこれに対応しきれないため,LaTeXの書式を使って目盛ラベルを2行にする.~ #codeprettify(lang-matlab){{ % 目盛位置の設定 tick = datenum(date_vec(1:6:end,:)); % 目盛ラベルの設定,LaTeX書式 tlabel = cell(1,length(tick)); for k = 1:length(tick) tlabel{k} = ['\begin{tabular}{c}',datestr(tick(k),'yyyy/mm/dd HH:MM'),'\end{tabular}']; tlabel{k} = strrep(tlabel{k},' ','\\'); end % 反映させる set(gca,'XTick',tick,'XTickLabels',tlabel,'TickLabelInterpreter','latex') }} &ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/MATLAB/datetick_2lines.png,480x437); ***参考 [#fa021d86] -[[stackoverflow>https://stackoverflow.com/questions/18560050/new-line-in-axis-tick-labels-in-matlab]]