István Zachar
István Zachar

Reputation: 1344

How can I specify to which figure a plot should go?

I have multiple figures open, and I want to update them independently during runtime. The following toy example should clarify my intention:

clf;

figure('name', 'a and b'); % a and b should be plotted to this window
hold on;
ylim([-100, 100]);

figure('name', 'c'); % only c should be plotted to this window

a = 0;
b = [];
for i = 1:100
    a = a + 1;
    b = [b, -i];
    c = b;
    xlim([0, i]);
    plot(i, a, 'o');
    plot(i, b(i), '.r');
    drawnow;
end

The problem here is that when I open the second figure, I cannot tell the plot functions to plot to the first one instead of the second (and only c should be plotted to the second).

Upvotes: 19

Views: 62265

Answers (2)

tim
tim

Reputation: 10186

You can specify the axes-object in the plot-command. See here:

http://www.mathworks.de/help/techdoc/ref/plot.html

So, open a figure, insert the axes, save the id of the axes object, and then plot into it:

figure
hAx1 = axes;
plot(hAx1, 1, 1, '*r')
hold on

figure
hAx2 = axes;
plot(hAx2, 2, 1, '*r')
hold on


plot(hAx2, 3, 4, '*b')
plot(hAx1, 3, 3, '*b')

Alternatively, you can use gca instead of creating the axes object yourself (because it's automatically created within the actual figure, when it doesn't exist!)

figure
plot(1,1)
hAx1 = gca;
hold on

figure
plot(2,2)

plot(hAx1, 3, 3)

See the following hierarchy representing the relationship between figures and axes

enter image description here

From http://www.mathworks.de/help/techdoc/learn_matlab/f3-15974.html.

Upvotes: 15

mindcorrosive
mindcorrosive

Reputation: 726

You can use something like

figure(1)
plot(x,y) % this will go on figure 1

figure(2)
plot(z,w) % this will go on another figure

The command will also set the figure visible and on top of everything.

You can switch back and forth between the figures as necessary by issuing the same figure command. Alternatively, you can use the handle to the figure as well:

h=figure(...)

and then issue figure(h) instead of using numeric indices. With this syntax, you can also prevent the figure from popping up on top by using

set(0,'CurrentFigure',h)

Upvotes: 22

Related Questions