Saving a resized plot

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Saving a resized plot

Octave - General mailing list
Hello Octave users,

I am trying to save a plot as a graphics file. This works in general, but not correctly when I resize the plot.

The code I have written loads the data to be plotted from separate files, creates a plot and changes some of its properties before saving it as a graphics file. I copied the code below, except the part where the data is assigned to the variables and manipulated.

The part which I think may create the trouble is the command
set(gcf,'position',[get(gcf,'position')(1:3) 250]);
with which I want to set the figure height to 250. So when I run the code, the figure window that is created looks like in the attached file window1.png. Resizing the figure obviously worked, but chart is not resized to fit into the smaller window.

Then when I drag the figure window by its title bar with the mouse, the chart changes size at once and looks like in window2.png. This is exactly what I want. Unfortunately, executing the command,
print('-dpng','-r600',imagefilename)
either before or after dragging the figure window, yields pngfile.png in both cases. The complete plot is saved (unlike shown in the figure window before moving it), but it has the standard height, not as depicted in window2.png.

I have used the command
get(gcf,'position')
and got
300  203  560  417
for the originally created figure window (no idea where the 417 comes from), and
308  208  560  250
after dragging the window, which what I expect. The problem is that the saved png file has not the right aspect ratio and seems to be entirely unaffected by the 250 pixel height.

Does anyone have an idea why that is and how to fix it?


The code:

col_re=[255 0 0]/255;  % definitions of colors
col_bl=[0 112 192]/255;
col_gr=[0 176 80]/255;

col1=col_bl;
col2=col_re;
col3=col_gr;

tmin=0;
tmax=1200;

i_div=200;
i_max=1000;
v_div=100;
v_max=500;

caption='caption';
imagefilename='pngfile.png';


% [part that loads data to the variables i1, i2, i3 and c1, c2, c3]


figure
[AX,Ha,Hb]=plotyy([tmin tmax],[0 0], [tmin tmax],[0 0]);
set(gcf,'position',[get(gcf,'position')(1:3) 250]);    % this is where the plot is resized
set(AX,'position',[0.12 0.17 0.76 0.7]);     % axes are set so that the labels and caption fit into the plot
set(Ha,'color','k')
set(Hb,'color','k')
hold on
grid on

H1=plot(i1(:,1)*1e9,i1(:,2),'parent',AX(1),'color',col1,'linestyle',':','linewidth',2);
H2=plot(i2(:,1)*1e9,i2(:,2),'parent',AX(1),'color',col2,'linestyle',':','linewidth',2);
H3=plot(i3(:,1)*1e9,i3(:,2),'parent',AX(1),'color',col3,'linestyle',':','linewidth',2);

plot(c3(:,1)*1e9,c3(:,2),'parent',AX(2),'color',col3,'linewidth',2);
plot(c2(:,1)*1e9,c2(:,2),'parent',AX(2),'color',col2,'linewidth',2);
plot(c1(:,1)*1e9,c1(:,2),'parent',AX(2),'color',col1,'linewidth',2);

axes(AX(1)); axis([tmin tmax 0 i_max])
axes(AX(2)); axis([tmin tmax 0 v_max])
set(AX(1),'Ytick',0:i_div:i_max)
set(AX(2),'Ytick',0:v_div:v_max)
set(AX,'tickdir','out')
set(AX,'linewidth',1.5)
set(AX,'gridalpha',.2)
set(AX,'box','off')
set(AX(1),'Xticklabel',[])
xlabel('t/ns')
set(get(AX(1),'Ylabel'),'String','i_C/A')
set(get(AX(2),'Ylabel'),'String','v_{CE}/V')
fontsize=12;
set(AX(1),'ycolor','k','FontName','Arial','FontSize',fontsize)
set(AX(2),'ycolor','k','FontName','Arial','FontSize',fontsize)
set(findall(gcf,'type','text'),'FontName','Arial','FontSize',fontsize,'fontWeight','bold')
title(AX(1),caption)

print('-dpng','-r600',imagefilename)    % is either executed in the script or manually in the command window



Some technical information:
I am using Octave 5.2.0, installed using the 64 bit installer file, in Windows 7. However, I had version 4.2.0 installed until yesterday and the same thing happened there.


window1.PNG (52K) Download Attachment
window2.PNG (60K) Download Attachment
pngfile.png (1001K) Download Attachment