日付のかけ離れた折れ線グラフを同じx軸上にプロットし、離れている区間は省略してプロットしたい。
13 次查看(过去 30 天)
显示 更早的评论
日付のかけ離れた折れ線グラフを同じx軸上にプロットし、
離れている区間は省略してプロットしたいのですができますでしょうか?
たとえば添付図のグラフなら01-01-2013~ 12-31-14の2年間離れていますがその箇所を
省略したいです。
スクリプトファイル
% x軸のデータは xData1 xData2 y軸のデータはyData1 yData2
xData1 = linspace(datenum('01-01-2012'),datenum('12-31-2012'),12);
yData1 = [0.67,0.75,0.74,0.39,0.65,0.17,0.70,0.03,0.27,0.04,0.09,0.82];
xData2 = linspace(datenum('01-01-2015'),datenum('12-31-2015'),12);
yData2 = [0.56 ,0.46 ,0.01 ,0.33 ,0.16 ,0.79 ,0.31 ,0.52 ,0.16 ,0.60 ,0.26 ,0.65];
% データを表示
plot(xData1,yData1); hold
plot(xData2,yData2);
datetick('x','yyyy/mmm')
--------------------------------------------------------------------------------------------------
MATLAB バージョン: 8.6.0.267246 (R2015b)
MATLAB ライセンス番号: ****
オペレーティング システム: Microsoft Windows 7 Professional Version 6.1 (Build 7601: Service Pack 1)
Java バージョン: Java 1.7.0_60-b19 with Oracle Corporation Java HotSpot™ 64-Bit Server VM mixed mode -------------------------------------------------------------------------------------------------- MATLAB バージョン 8.6 (R2015b) Simulink バージョン 8.6 (R2015b) Embedded Coder バージョン 6.9 (R2015b) MATLAB Coder バージョン 3.0 (R2015b) Signal Processing Toolbox バージョン 7.1 (R2015b) SimMechanics バージョン 4.7 (R2015b) SimPowerSystems バージョン 6.4 (R2015b) Simscape バージョン 3.14 (R2015b) Simulink Coder バージョン 8.9 (R2015b) Stateflow バージョン 8.6 (R2015b)
采纳的回答
michio
2017-7-25
编辑:michio
2017-8-25
下記の様に軸ラベルをカスタマイズして出来なくもないですが、すこし煩雑です。いかがでしょうか? x軸は1,2,3・・とデータの数だけ増加する等差数列でプロットした後に、`x軸ラベルを日付に書き換えています。
intvlを変更してx軸ラベルに表示する日付の個数を調節してみてください。
n1 = length(yData1);
n2 = length(yData2);
x1 = 1:n1;
x2 = n1+1:n1+n2;
plot(x1,yData1); hold on
plot(x2,yData2); hold off
ax = gca;
intvl = 2;
ax.XTick = 1:intvl:length([yData1,yData2]);
label = datestr([xData1, xData2],'mmm/yyyy');
ax.XTickLabel = label(1:intvl:end,:);
ax.XTickLabelRotation = 45;
更多回答(1 个)
Jiro Doke
2017-7-25
既存の機能としてはないと思いますのでグラフのカスタマイズをうまく活用するのがよいでしょう。Michio さんの方法も一つですが、他の案として二つ別々の軸を作成して、隣同士に配置するというのはどうでしょう。
% x軸のデータは xData1 xData2 y軸のデータはyData1 yData2
xData1 = linspace(datenum('01-01-2012'),datenum('12-31-2012'),12);
yData1 = [0.67,0.75,0.74,0.39,0.65,0.17,0.70,0.03,0.27,0.04,0.09,0.82];
xData2 = linspace(datenum('01-01-2015'),datenum('12-31-2015'),12);
yData2 = [0.56 ,0.46 ,0.01 ,0.33 ,0.16 ,0.79 ,0.31 ,0.52 ,0.16 ,0.60 ,0.26 ,0.65];
% データを表示
ax1 = axes('Units','normalized','Position',[0.1 0.15 0.4 0.8]);
plot(xData1,yData1,'b')
datetick('x','yyyy/mmm','keepticks')
ax2 = axes('Units','normalized','Position',[0.5 0.15 0.4 0.8]);
plot(xData2,yData2,'r')
datetick('x','yyyy/mmm','keepticks')
ax2.YAxisLocation = 'right'; % 右のグラフは右に Y 軸表示
ax1.XTick = ax1.XTick(1:end-1); % 重なっている目盛りを削除
ax2.XTick = ax2.XTick(2:end); % 重なっている目盛りを削除
% Y 軸表示範囲を統一
yl = [min([ax1.YLim,ax2.YLim]) max([ax1.YLim,ax2.YLim])];
set([ax1 ax2],'XTickLabelRotation',30,'Box','off','YLim',yl)
另请参阅
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!