'hold on'不适用于 matlab 中的多位置子图



我正在MATLAB(R2015a)中制作一些子画面的动画。然而,当我试图定位一个子地块以占据多个位置时,hold on命令不再起作用。

以下是我的问题的简化形式:

clear
N = 20;
Analysis(:,1) = linspace(1,N,N);
Analysis(:,2:5) = randi([1, 20],20,4);
    for n = 1:N;
        subplot(2,2,[1,2]);
        title('Particle counts at step number');
        plot(Analysis(n,1), Analysis(n,2), '.', 'Markersize', 8, 'color',      'red'), hold on;
        plot(Analysis(n,1), Analysis(n,3), '.', 'Markersize', 8, 'color', '[0,0.5,0]');
        legend({'Methane','Oxygen'},'FontSize',8,'FontWeight','bold', 'Location', 'northeastoutside');
        xlim([0,N]);
        ylim([0, 20]);

        subplot(2,2,[3,4]);
        title('Temperature(k) and Pressure');
        plot(Analysis(n,1), Analysis(n,4), '.', 'Markersize', 8, 'color', 'red'), hold on;
        plot(Analysis(n,1), Analysis(n,5), '.', 'Markersize', 8, 'color', 'blue');
        legend({'Temperature','Pressure'},'FontSize',8,'FontWeight','bold', 'Location', 'northeastoutside');
        xlim([0,N]);
        ylim([0, 20]);
        pause(0.1);
        drawnow;
    end

当我删除图例或将子图形的位置更改为单数时,hold-on命令似乎再次起作用,但我需要它同时使用这两个命令。

正如我上面所说,这确实是一个bug。一种可能的解决方法是修改行对象的XDataYData属性:

例如:

N = 20;
Analysis(:,1) = linspace(1,N,N);
Analysis(:,2:5) = randi([1, 20],20,4);
subplot(2,2,[1,2]);
title('Particle counts at step number');
hold on;
ph(1) = plot(Analysis(1,1), Analysis(1,2), '.', 'Markersize', 8, 'color',      'red');
ph(2) = plot(Analysis(1,1), Analysis(1,3), '.', 'Markersize', 8, 'color', '[0,0.5,0]');
hold off;
legend({'Methane','Oxygen'},'FontSize',8,'FontWeight','bold', 'Location', 'northeastoutside');
xlim([0, N]);
ylim([0, 20]);
subplot(2,2,[3,4]);
title('Temperature(k) and Pressure');
hold on;
ph(3) = plot(Analysis(1,1), Analysis(1,4), '.', 'Markersize', 8, 'color', 'red');
ph(4) = plot(Analysis(1,1), Analysis(1,5), '.', 'Markersize', 8, 'color', 'blue');
hold off;
legend({'Temperature','Pressure'},'FontSize',8,'FontWeight','bold', 'Location', 'northeastoutside');
xlim([0 ,N]);
ylim([0, 20]);
for n = 2:N;
    k = 2;
    for ii = 1:4
        ph(ii).XData = Analysis(1:n, 1);
        ph(ii).YData = Analysis(1:n, k);
        k = k + 1;
    end
    pause(0.1);
    drawnow;
end

我相信这给了你想要的。不是最漂亮的,但它很实用。

最新更新