2012-12-20 29 views
5

質問:不均一軸上に画像を描くことは可能ですか?Matlabの画像軸の不均一軸

詳細:

私は画像のように、多次元時系列を説明する必要があります。しかし、この時系列の時間グリッドは非常に不均一です。ここに例があります:

m = 10; 
n = 3; 
t = sort(rand(m, 1)); % non-uniform time 
values = randn(m, n); % some random values 

figure, plot(t, values);はそれをうまく処理します。

imagesc()

しかしはマニュアルに従ってt(1)t(end)間に均一な時間にtを変換:

関数imagesc(X、Y、C)画像としてCを表示し、 x軸とy軸の範囲を指定しますベクトルxとyを持つ軸。

したがって、コマンド:

figure, imagesc(t, 1 : n, values'); colorbar; 

は、均一な時間グリッド上の画像を示します。

enter image description here

enter image description here

編集:それは、より高い均一な解像度で再サンプリングし、時系列に可能です。しかし、私のtimeseriesはすでに非常に大きいです。

答えて

3

ソリューション

不均一な間隔のためsurfaceを使用してみてください。

まず、入力データと同じサイズの3次元XYZ表面を作成します。

m = 10; 
n = 3; 
t = sort(rand(m, 1)); % non-uniform time 
values = randn(m, n); % some random values 
x = repmat(t,1,n); 
y = repmat(1:n,m,1); 
z = zeros(size(y)); 

その後、自分の価値観をカラーマップ。

cdata = real2rgb(values); % Where size(cdata) = [m n 3] 

最後に、プロットの表面:あなたのためにこれを行うことができますMathWorks社のファイル交換、real2rgb、に投稿された便利なツールがあります。あなたは空想を得て透明性を設定することさえできます。

surface(x,y,z,cdata,'EdgeColor','none','FaceColor','texturemap',... 
    'CDataMapping','direct'); 
alpha(0.3) 

enter image description here

+0

ありがとうございます。私はいつ近くのPCにいるのか確認します。 – Serg

3

ファイル交換からuimagescを試してみてください。

enter image description here

+0

ありがとうございました。それはうまく動作しますが、私の2GBマトリックス(timeseries)には適用されません。ある時点で、より高い解像度でデータを再サンプリングする。例えば、tの10の時点は269点になった。 – Serg

+0

2GBのマトリックスを使用している場合、imresizeなどを使用して妥当なものにリサンプリングするのは論理的ではありませんか? 1920x1200x24ビットの画面には約10MBの情報しか表示されませんが、2GBのマトリックスには何が良いでしょうか? – bla

+0

これは間違いありませんが、ズームイン時に実際の時間スケールを確認する必要があります。この図は24時間のデータを示しており、特定の1秒間に何が起こるかを確認する必要があるとします。ありがとう。 – Serg

4

MATLABでpcolorの機能があります。この関数は、あなたが求めているものとまったく同じです。

m = 10; 
n = 3; 
t = sort(rand(m, 1)); % non-uniform time 
values = randn(m, n); % some random values 
figure 
plot(t, values); 
figure 
pcolor(t, 1 : n, values'); 
colorbar;