How can I set linewidth directly in bode command?

조회 수: 340 (최근 30일)
byungkeuk cho
byungkeuk cho 2020년 3월 25일
답변: Siddharth Jawahar 2024년 6월 19일
I can draw a bode plot as below
sys = tf(4,[1 0.5 4]);
figure(1), bode(sys), grid on;
Now, I would like to change some options in the Bode plot.
I can set the options through 'bodeoptions' as below.
sys = tf(4,[1 0.5 4]);
options = bodeoptions;
options.FreqUnits = 'Hz';
options.Title.FontSize = 14;
options.XLabel.FontSize = 14;
options.YLabel.FontSize = 14;
options.TickLabel.FontSize = 14;
figure(2), bode(sys, options), grid on;
But I can't find the option to set the linewidth of the bode plot.
How can I do that?

답변 (4개)

Birdman
Birdman 2020년 3월 25일
You can try semilogx. See the following code:
sys=tf(4,[1 0.5 4]);
[mag,phase,wout] = bode(sys);
Mag=20*log10(mag(:));Phase=phase(:);
figure(1);semilogx(wout,Mag,'LineWidth',5);grid on;
figure(2);semilogx(wout,Phase,'LineWidth',1);grid on;
  댓글 수: 1
byungkeuk cho
byungkeuk cho 2020년 3월 25일
Thank you for your answer.
I thought of this way but I wanted to know if I can do the same thing with bode options.
Really appreciate it though.

댓글을 달려면 로그인하십시오.


Star Strider
Star Strider 2020년 3월 25일
It is possible to do this without getting the outputs from bode and doing separate plots, however it requires some fairly extensive ‘handle diving’:
sys = tf(4,[1 0.5 4]);
figure(1)
bode(sys)
grid
Fh = gcf; % Handle To Current Figure
Kids = Fh.Children; % Children
AxAll = findobj(Kids,'Type','Axes'); % Handles To Axes
Ax1 = AxAll(1); % First Set Of Axes
LinesAx1 = findobj(Ax1,'Type','Line'); % Handle To Lines
LinesAx1(2).LineWidth = 5; % Set ‘LineWidth’
Ax2 = AxAll(2); % Second Set Of Axes
LinesAx2 = findobj(Ax2,'Type','Line'); % Handle To Lines
LinesAx2(2).LineWidth = 5; % Set ‘LineWidth’
Experiment to get different results.
  댓글 수: 2
byungkeuk cho
byungkeuk cho 2020년 3월 25일
Thank you for your answer.
It looks a bit complicated as you said.
Anyway, I will keep it as another option.
Star Strider
Star Strider 2020년 3월 26일
My pleasure.
This is the only way I am aware of to change the linewidths (or any other options) in the Control System Toolbox and System Identification Toolbox graphics functions.

댓글을 달려면 로그인하십시오.


Marcelo Moraes
Marcelo Moraes 2023년 4월 17일
fig = gcf;
obj = findobj(fig,'Type','hggroup');
for idx = 1:numel(obj)
for jdx = 1:numel(obj(idx).Children)
obj(idx).Children(jdx).LineWidth = 2;
end
end

Siddharth Jawahar
Siddharth Jawahar 2024년 6월 19일
Hello Byungkeuk,
Here is an example script to demonstrate how you can adjust the linewidth of a bode plot.
sys = tf([4, 1], [0.5, 4]); % Define the system transfer function
figure(1);
[mag,phase,wout] = bode(sys); % Store Bode plot data
h = bodeplot(sys); % Plot Bode diagram
grid on;
% Get the line handles
hline = findall(gcf, 'type', 'line');
% Set the linewidth
set(hline, 'LineWidth', 2); % Change 2 to your desired linewidth
Hope this helps,
Sid

카테고리

Help CenterFile Exchange에서 Response Computation and Visualization에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by