Filter löschen
Filter löschen

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

21 Ansichten (letzte 30 Tage)
maeda
maeda am 25 Jul. 2017
Bearbeitet: michio am 25 Aug. 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 Kommentar
michio
michio am 25 Jul. 2017
ライセンス番号は念のため削除いたしました。

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

michio
michio am 25 Jul. 2017
Bearbeitet: michio am 25 Aug. 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 Kommentar
maeda
maeda am 26 Jul. 2017
Michioさん x軸の省略の表現できました。プロットした後に日付に書き換えるアイデア思いつきませんでした。ありがとうございます!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Jiro Doke
Jiro Doke am 25 Jul. 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 Kommentar
maeda
maeda am 27 Jul. 2017
Jiroさん ご回答ありがとうございます。スクリプト実行してみました。 二つの軸を並べれば、軸の省略表現ができますね。

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu 座標軸の外観 finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!