2

それが私が2つのグラフィックを描く方法です(私がそれをするのを手伝ってくれた人たちに感謝します):

clear
logsFolder = 'C:\logs\';
stocks = {'log'};

for stock = stocks
    filename = [logsFolder stock{1} '.log'];
    fLog = fopen(filename);
    data = textscan(fLog, '%f:%f:%f:%f %f %f %f');
    fclose(fLog);

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

    y = data{5};
    yPrice = data{6};

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

    figure;
    [AX,H1,H2] = plotyy(xindays,y,xindays,yPrice);
    set(AX(1),'xtick',[]);

    lo1 = min(y);
    hi1 = max(y);
    lo2 = min(yPrice);
    hi2 = max(yPrice);

    if (hi2/lo2 > hi1/lo1)
      ylim(AX(1),[lo1 hi2/lo2 * lo1]);
      ylim(AX(2),[lo2 hi2]);
    else
      ylim(AX(1),[lo1 hi1]);
      ylim(AX(2),[lo2 hi1/lo1 * lo2]);
    end

    ticklabelformat(AX(2),'y','%g')
    ticklabelformat(AX(2),'x',{@tick2datestr,'x','HH:MM:SS'})
    title(stock);

    % iNeedToDrawThat = data{7}
end

入力ファイルの例はこちらから入手できます。ご覧のとおり、ファイルには表示したい最後の列が含まれています。範囲は 0 (図の下部) から最大値 (グラフの上部) までです。だから、どうにかして3つのグラフィックを描く必要があります。すでに 2 つの軸があり、3 番目のグラフを追加する場所がないため、3 番目のグラフのラベル付きの軸を省略しても問題ありません。ただし、可能であれば、2 つの軸を「重ねる」ことは問題ありません。

どうすればいいのかわからないので、あなたの助けを求めています。

私はそれを試しましたが、うまくいきません:

figure;
[AX,H1,H2] = plotyy(xindays,y,xindays,yPrice);

hold on;
volume = data{7};
plot(xindays, volume);
hold off;
4

3 に答える 3

0

hold on の使用例

figure;
plot(x1,y1);
hold on
plot(x2,y2);
plot(x3,y3);
hold off

ループの外側で「フィギュア」と「ホールドオン」を1回だけ実行します。次に、必要なすべてのグラフをプロットします

于 2012-08-10T18:40:38.227 に答える
0
figure;
[AX,H1,H2] = plotyy(xindays,y,xindays,yPrice);

hold on;
volume = data{7};
plot(xindays, volume);
hold off;

hold on を使用して提案した方法で実行すると、つまり最初に plotyy() を使用すると、軸が調整されないため、3 番目のシリーズが最初の軸セットの範囲外にある場合は表示されません。それらをひっくり返してみて、結果が得られるかどうかを確認してください。

volume = data{7};
plot(xindays, volume);

hold on;

[AX,H1,H2] = plotyy(xindays,y,xindays,yPrice);

このようにして、軸が調整されます

例えば:

t = 1:10;
x = t*2;
y = t*-2;
z = x + 1000;

今すぐ比較

plot(t,z, 'r')
hold on
plotyy(t,x, t,y)

plotyy(t,x, t,y)
hold on
plot(t,z, 'r')
于 2012-08-22T14:09:23.127 に答える