2017-11-12 17 views
2

私はプロットしたいEEGデータベースを持っています。 データベースは19×1000×134のマトリックスであり、MATLABスクロールプロット

  • をチャネル数とする。最初のアプローチでは、私は1つのチャンネルで作業しています。
  • 千サンプルの大きさ(データの500ヘルツのサンプリングレートのために1000ポイント、すなわち2秒)
  • 134エポックの数(異なる2秒経験の数)

アイデア同じグラフ上でエポックn-1の直後にエポックnをプロットすることです。これをプロットするために使用された(X、Y)行列は134000 * not_muchの大きさを持ち、私は各エポックを個々に見るためにプロット上を水平にスクロールすることができます。

fs = s_EEG.sampling_rate; 
[channel, length, nb_epoch] = size(s_EEG.data) 

display(s_EEG.data, fs, length, channel, nb_epoch) 

function display(data, fs, length, channel, nb_epoch) 
    figure("Name", "Epoch display") 

    for j = 1:nb_epoch 
     time = 0.002+(2*j-2):1/fs:2*j; 
     epoch = data(1,:,j); 
     plot(time, epoch) 
     hold on 
    end 
    hold off 

end 

電流出力:一つのチャンネルのみプロット

私のコード、 Current output

を私はMatlabのには完全に新たなんだ、と私はまだそれをうまく使用していないが、私同じグラフ上で、個別に、そして正しい視覚化スケールで、私の134のエポック(すべて1つの色=上記の1つのエポック)を見る方法を探しています。

ありがとうございます!

+0

私は本当にあなたが求めているものを得ることができません、より具体的になることができますか?私は...現在の結果に関する問題は何ですか?彼らはすべて同じ色でなければなりませんか?実際には、同じプロットで134色の異なる色を使用することは、あなたが意味するものを得るなら、難しくなるでしょう。 –

+0

私ははっきりしていませんでした。いいえ、画面上でBIGの最初のエポック(2秒のデータ)を確認してから、2番目のエポックにスクロールしてから3番目のエポックにスクロールしたいと思います。私は134の異なる数字を開きたくないので、2秒のデータを1秒に2秒間表示したい – Mathieu

+0

これはおそらく助けになるかもしれません:https://www.mathworks.com/matlabcentral/fileexchange/14984-scrollplot-scrollable-xy-axes – kpg987

答えて

1

これは私がすでに持っていたものと非常に似ていますので、私はあなたのために少しそれを微調整しました。基本的にplotDataをdataの行列に渡します。あなたがすでに持っているように、あなたのアイテムを順次プロットします。

スライダを押すと、一度に1つの要素(エポック)をステップするようにx制限が変更されます。この領域をクリックすると、一度に2エポックが進みます。現在のところ、現在表示されているものが表示されているだけです。 "epoch"#はコマンドラインにありますdisp(['Current Epoch: ' num2str(viewI)])しかし、それを図のテキストボックスにリダイレクトすると、あなたが見ているものをより簡単に知ることができます。 x制限を2で掛けます。

リストボックスを使用して、プロット& x-limitsをリセットする新しいチャネルに切り替えます。

コマンドラインで次のように呼び出します。

>> plotData(data) 

CODE:plotData.m以下のようにすべて

function plotData(data) 
% data = rand(19,1000,134); 
f = figure('Units','Normalized','Position',[0.25 0.25 0.5 0.5]); 
a = axes('Units','Normalized','Position',[0.05 0.15, 0.75 0.75]); 
s = uicontrol(f, 'Style','Slider', 'Units','Normalized','Position',[0.05 0.025, 0.75 0.05],... 
        'Min',1,'Max',size(data,3),'Value',1, 'Callback',{@sliderChange,a}); 
l = uicontrol(f, 'Style','listbox','Units','Normalized','Position',[0.85 0.15, 0.1, 0.75],... 
        'String',cellstr(num2str([1:size(data,1)]')),'Callback',{@changeChannel,a,s,data}); 

stepSize = 1/(s.Max - s.Min); 
s.SliderStep = [stepSize 2*stepSize];    
changeChannel(l,[],a,s,data) 

function changeChannel(l,evtData,a,s,data) 
cla(a); 
chanNum = str2double(l.String{l.Value}); 
sR = 500; %500Hz 
tempData = reshape(data(chanNum,:,:),[],size(data,3)); %Reshape each epoch into a column 
tempTime = [0:1/sR:(size(data,2)-1)/sR]' + (0:1:size(data,3)-1)*2; %Build time array 
plot(a,tempTime,tempData) %plot all the lines 
s.Value = 1; %Rest Slider Position 

function sliderChange(s,evtData,a) 
viewI = round(s.Value); 
disp(['Current Epoch: ' num2str(viewI)]) 
xlim(a,[(viewI-1)*2 viewI*2] + [-.1 .1]) 

注意を保存:あなたはMatlabの2016B以上が必要ですので、これは、暗黙的な拡張を使用しています。

+0

ありがとう!それは素晴らしい、私の必要性に完全に合うように聞こえる!私はできるだけ早く見ていきます。 – Mathieu

+0

完璧に動作します!ありがとう! – Mathieu

+0

私の問題の2番目の部分(私は前に考えていなかった...)、あなたが私を助けるためにもう少し時間を持っていれば:) https://stackoverflow.com/questions/47272588/matlab-uicontrol-callback-return-マトリックス – Mathieu