Problem in printing with bodeplot function

4 visualizaciones (últimos 30 días)
Baris Ciftci
Baris Ciftci el 17 de Feb. de 2020
Comentada: Baris Ciftci el 3 de Mzo. de 2020
Hi all,
I try to get some Bode plots and print the figure with specific width and length. However, the resultant figure places the window such that the x axis label stays out of the window and y axis is partly out of the window depending on the PaperSize dimensions (for example with the values in the code below). I want Matlab to configure the plot such that the all the x axis, y axis labels, title, etc. stay inside the visible window and print in that way. Any help is appreciated. Below is the main function with bodeplot
sys = rss(5);
opts1=bodeoptions('cstprefs');
opts.FreqUnits = 'Hz';
opts1.XLim={[100 20000]};
bodeplot(sys,opts1);
grid on; title('');
width = 8.8; % in cm
height = 6; % in cm
fontsize = 10;
filename = 'bode';
setfig(gcf, filename, width, height, fontsize);
print(gcf, '-dpdf', filename);
and below is the setfig function
function out = setfig(varargin)
if nargin > 0
if isempty(varargin{1})
figno = gcf;
else
figno = varargin{1};
end;
else
figno = gcf;
end;
if nargin > 1
filename = varargin{2};
else
filename = [];
end;
if nargin > 2
if isempty(varargin{3})
width=8.8;
else
width = varargin{3};
end;
else
width=8.8;
end
if nargin > 3
if isempty(varargin{4})
height = width;
else
height = varargin{4};
end;
else
height = width;
end
if nargin > 4
if isempty(varargin{5})
fontsize = 10;
else
fontsize = varargin{5};
end;
else
fontsize = 10;
end
if nargin > 5
if isempty(varargin{6})
fontname = 'Times New Roman';
elseif varargin{6} == 'nc'
fontname = '';
else
fontname = varargin{6};
end;
else
fontname = 'Times New Roman';
end
set(figno, 'Renderer', 'Painters');
set(figno, 'PaperUnits', 'Centimeters');
set(figno, 'PaperSize', [width height]);
set(figno, 'PaperPositionMode', 'auto');
set(figno, 'PaperPosition', [0 0 width height]);
ppos = get(figno,'PaperPosition');
su = get(figno,'Units');
pu = get(figno,'PaperUnits');
set(figno,'Units',pu);
spos = get(figno,'Position');
set(figno,'Position',[spos(1) spos(2) ppos(3) ppos(4)])
set(figno,'Units',su)
% Set all fonts on the current figure
allaxes = findall(figno, 'Type','axes');
for k = 1:length(allaxes)
set([allaxes(k); findall(allaxes(k), 'Type','text')], 'FontSize', fontsize, 'FontName', fontname);
end
out =figno;
if ~isempty(filename)
print (figno,'-depsc', filename)
end

Respuestas (1)

Jyotsna Talluri
Jyotsna Talluri el 3 de Mzo. de 2020
You can increase the height and width dimensions of the paper size .On setting the height and width to 10 would fit the entire plot in the figure
  1 comentario
Baris Ciftci
Baris Ciftci el 3 de Mzo. de 2020
Yes, but my point is to have the proper display with any dimension I ask for (since I have limited space for publication). For me, what Matlab needs to do is to prioritize the x and y labels such that they occupy the exact required amount of space in the visible part and then the rest of the space is left for the plots.

Iniciar sesión para comentar.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by