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

5 vues (au cours des 30 derniers jours)
maeda
maeda le 25 Juil 2017
Modifié(e) : michio le 25 Août 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 commentaire
michio
michio le 25 Juil 2017
ライセンス番号は念のため削除いたしました。

Connectez-vous pour commenter.

Réponse acceptée

michio
michio le 25 Juil 2017
Modifié(e) : michio le 25 Août 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 commentaire
maeda
maeda le 26 Juil 2017
Michioさん x軸の省略の表現できました。プロットした後に日付に書き換えるアイデア思いつきませんでした。ありがとうございます!

Connectez-vous pour commenter.

Plus de réponses (1)

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

Connectez-vous pour commenter.

Catégories

En savoir plus sur 座標軸の外観 dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!