Creating intersection lines in a semilogx graph

조회 수: 6 (최근 30일)
Eric
Eric 2011년 1월 23일
I have the following MATLAB code to create a Bode plot from measured data:
function bodeFromMeasure(Freq_Hz, Mag_V)
%bodeFromMeasure(Freq_Hz, Mag_V)
% Freq_Hz: vector of unconverted x data
% Mag_V: vector of unconverted y data
% Convert Variables
MagdB = 20.*log(Mag_V);
Freq_w = 2.*pi.*Freq_Hz;
% Create Bode Plot
bodePlot = figure('XVisual',...
'0x24 (TrueColor, depth 24, RGB mask 0xff0000 0xff00 0x00ff)',...
'NumberTitle','off',...
'Name','Lab 1 - Bode Plot');
% Create axes
axes1 = axes('Parent',bodePlot,'YGrid','on','XScale','log','XMinorTick','on',...
'XMinorGrid','on',...
'XGrid','on',...
'FontSize',12);
xlim(axes1,[0 150000000]);
box(axes1,'on');
hold(axes1,'all');
% Create semilogx
semilogx(Freq_w,MagdB,'DisplayName','Freq_w,Magdb');
% Create xlabel
xlabel('Frequency (rad/sec)','FontSize',11);
% Create ylabel
ylabel('Magnitude (dB)','FontSize',11);
% Create title
title('Bode Plot','FontWeight','bold','FontSize',14);
% Create lines
I would like to do the following 4 things through code, unfortunately I do not have the knowledge to do them:
  1. Create a horizontal dashed line at y=0 to intersect the graphed curve
  2. Create a vertical dashed line that intersects the intersection created between the horizontal line and the graphed curve
  3. Place a datatip at the y=0 point on the graphed curve
  4. Automatically set the upper limit of the x-axis range to the last value in the x-axis vector data array
I am not very experienced in MATLAB and have looked through forums and function syntax and still cannot accomplish these things. Can anyone more experienced in the program lend a hand?
Thanks in advance for any help.
  댓글 수: 1
Kenneth Eaton
Kenneth Eaton 2011년 1월 24일
What range of values (i.e. min and max) do your inputs Freq_Hz and Mag_V have?

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

답변 (2개)

Kenneth Eaton
Kenneth Eaton 2011년 1월 23일
Addressing the first 3 points, it sounds like you want to create a datatip with crosshairs on one point of your curve. You can place datatips using the Data Cursor tool. These data tips don't have crosshairs by default, so you can either plot them yourself, or use my solution to this other question to attach crosshairs to the datatip that automatically update when the datatip is moved.
Addressing point 4, you can change the x axis limit just like you did using the function XLIM, but specify the maximum value of the range using the function MAX like so:
xlim(axes1,[0 max(Freq_w)]);

Eric
Eric 2011년 1월 23일
Using your solution for the crosshairs, it only creates a vertical line intersecting the datatip in my graph. Also, is it not possible to create the datatip programmatically at the point y=0?

카테고리

Help CenterFile Exchange에서 Plot Customization에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by