1

私はまだmatlabで使用できるものを作成できません。

タスクは非常に簡単です。2つのファイルがあります。devideHistory.logdeals.log両方 のファイルで、最初の2つの列のみを検討します。したがって、最初のファイルには、グラフィックを形成するXとYが含まれています。2番目のファイルには、グラフィックに表示する必要があるマーカーのXとYが含まれています。このコミュニティの助けを借りて、そのようなプログラムが作成されました

clear

fDevide = fopen('devideHistory.log');
data = textscan(fDevide, '%f:%f:%f:%f %f,%f %f,%f');
fclose(fDevide);

% hh:min:sec:millisec
secvec = [60*60 60 1 1e-3];
x = [data{1:4}] * secvec';

flvec = [1 1e-16];
y = [data{5:6}] * flvec';

xindays = x / (24*60*60);

plot(xindays, y);
% set(gca, 'YTickLabel', get(gca,'YTick'))
% datetick('x', 'HH:MM:SS');

hold on

fDeals = fopen('deals.log');
data = textscan(fDeals, '%f:%f:%f:%f %f,%f %f,%f %f,%f %f');
fclose(fDeals);

% hh:min:sec:millisec
secvec = [60*60 60 1 1e-3];
x = [data{1:4}] * secvec';

flvec = [1 1e-16];
y = [data{5:6}] * flvec';

xindays = x / (24*60*60);

plot(xindays, y, 'go','MarkerSize',6,'LineWidth',3);

% i need to set enough precision on Y but this doesn't work because
% while zooming labels doesn't update
set(gca, 'YTickLabel', get(gca,'YTick')) 

% i want to have "time" on X but this doesn't work because
% while zooming new labels doesn't appear
datetick('x', 'HH:MM:SS');

結果: グラフィック

しかし、ズーム機能には2つの問題があります。

さて、私の仕事はとてもシンプルで簡単です。それのためのmatlabのシンプルで簡単な解決策はありますか?上記のコードにはすでにいくつかの「ハック」が含まれていますが、それでも期待どおりに機能しません。ハッキングを続けるのは意味がありません。誰かが別のアプローチを提案できますか?おそらくmatlabは私のニーズにちょうど適していないのですか?

4

1 に答える 1

1
  1. http://www.mathworks.com/matlabcentral/fileexchange/36254-ticklabelformat をダウンロード
  2. 独自の目盛りラベル付け呼び出しを削除します。これらのものは次のとおりです。

    set(gca, 'YTickLabel', get(gca,'YTick')) 
    datetick('x', 'HH:MM:SS');
    
  3. それらを

    ticklabelformat(gca,'y','%g')
    ticklabelformat(gca,'x',{@tick2datestr,'x','HH:MM:SS'})
    
  4. tick2datestr.m以下を含む新しいヘルパー関数を作成します。

    function tick2datestr(hProp,eventData,axName,dateformat)    %#ok<INUSL>
        hAxes = eventData.AffectedObject;
        tickValues = get(hAxes,[axName 'Tick']);
        tickLabels = arrayfun(@(x)datestr(x,dateformat),tickValues,'UniformOutput',false);
        set(hAxes,[axName 'TickLabel'],tickLabels);
    end
    

このヘルパー関数のほとんどは、ticklabelformat から直接コピーされたものです。



はい、これはハッキングと見なすことができますが、TheMathworks が目的の「簡単な」ソリューションを実装しない限り、独自の機能を作成する必要があります。

于 2012-07-27T13:28:09.890 に答える