Plotting and Saving as File in MATLAB
Asked Answered
A

2

11

I need to plot and save to image file in MATLAB. Here is the code that I am calling inside a 'for' loop:

figure
scatter(data_x_pos,data_y_pos,'r*')
hold on
scatter(data_x_neg,data_y_neg,'b')
t = linspace(-80,80);
y = -model.w(1)*t/model.w(2);
plot(t,y,'k');
% need to save this plot to image to a file here

Now, this is starter code that I am using for some work and I don't understand it completely (example - the command 'figure'). There have been suggestions to use saveas or print but I believe I need handles for them. Could someone help me out here?

Thanks.

Autocatalysis answered 1/10, 2011 at 2:49 Comment(0)
S
17

figure() is a function which returns a handle to the figure:

f = figure()
scatter(data_x_pos,data_y_pos,'r*')
...

You can then use this handle to save the figure:

saveas(f, 'image.png');

Take a look at the tutorials on Handle Graphics to learn more.

scatter, and plot also return handles to the collection of points, or the lines, or whatever, they've plotted.

Seaweed answered 1/10, 2011 at 3:24 Comment(2)
Yes. thanks. I figure it out myself too. gcf returns the handle to the present figure. So, that works too!Autocatalysis
Better than saveas should be options.Format = format; hgexport(f, 'image.png', options);. This way, the exported figure will look exactly like it does on your screen.Quadroon
E
4

An alternative solution that may aid some is to take advantage of the fact that Matlab updates a variable called gcf "get current figure handles" each time a figure is created. Even if a handle is not expressly created with the f = figure(); handle declaration command, you can still use commands such as print() and saveas() by calling the gcf handle variable. For example, this block of code might also function for others who do not have the OP's requirement to operate within a large for loop with uniquely identified figures:

scatter(data_x_pos,data_y_pos,'r*')
hold on
scatter(data_x_neg,data_y_neg,'b')
t = linspace(-80,80);
y = -model.w(1)*t/model.w(2);
plot(t,y,'k');
hold off;
saveas(gcf,'filename','png')
Enclave answered 23/1, 2015 at 21:11 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.