Azzera filtri
Azzera filtri

Problem in printing with bodeplot function

2 visualizzazioni (ultimi 30 giorni)
Baris Ciftci
Baris Ciftci il 17 Feb 2020
Commentato: Baris Ciftci il 3 Mar 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

Risposte (1)

Jyotsna Talluri
Jyotsna Talluri il 3 Mar 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 Commento
Baris Ciftci
Baris Ciftci il 3 Mar 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.

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by