日付のかけ離れた折れ​線グラフを同じx軸上​にプロットし、離れて​いる区間は省略してプ​ロットしたい。

17 visualizzazioni (ultimi 30 giorni)
maeda
maeda il 25 Lug 2017
Modificato: michio il 25 Ago 2017
日付のかけ離れた折れ線グラフを同じ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)
  1 Commento
michio
michio il 25 Lug 2017
ライセンス番号は念のため削除いたしました。

Accedi per commentare.

Risposta accettata

michio
michio il 25 Lug 2017
Modificato: michio il 25 Ago 2017
下記の様に軸ラベルをカスタマイズして出来なくもないですが、すこし煩雑です。いかがでしょうか? 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 Commento
maeda
maeda il 26 Lug 2017
Michioさん x軸の省略の表現できました。プロットした後に日付に書き換えるアイデア思いつきませんでした。ありがとうございます!

Accedi per commentare.

Più risposte (1)

Jiro Doke
Jiro Doke il 25 Lug 2017
既存の機能としてはないと思いますのでグラフのカスタマイズをうまく活用するのがよいでしょう。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)
  1 Commento
maeda
maeda il 27 Lug 2017
Jiroさん ご回答ありがとうございます。スクリプト実行してみました。 二つの軸を並べれば、軸の省略表現ができますね。

Accedi per commentare.

Prodotti

Community Treasure Hunt

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

Start Hunting!