Plotting Chart With 2 X Axes and 2 Y Axes

조회 수: 3 (최근 30일)
Brian Robinson
Brian Robinson 2020년 5월 26일
답변: Brian Robinson 2020년 5월 29일
Hi there,
I am trying to plot various curves using semilogx along with the line of best fit. I also want to plot some other plots of semilogx on different axes (but in the same figure). I have:
ARI = ones(n,1)./P; % Average Return Interval 1/P
semilogx((ARI), Q);
p_1 = polyfit(log(ARI),Q,1); % Linear best fit
f_1 = polyval(p_1,log(ARI));
hold on
ax1 = gca; % Axis for Linear Fit
ax1.XColor = 'r';
ax1.YColor = 'r';
ax1_pos = ax1.Position; % Position of first axes
ax2 = axes('Position', ax1_pos, 'XAxisLocation','top','YAxisLocation',"right",'Color', 'none'); % Create the second axis
semilogx(ARI, f_1, '--r');
Q_100yr = polyval(p_1, log(100)) % Q value for 1 in 100 year
hold off
For some reason when I try to create the second axis, the position of the axis is not as I would like and I lose my original log curve. It ends up looking like this:
Could someone help me to get the 2 axes working.
Thanks in advance,
Brian

채택된 답변

Adam Danz
Adam Danz 2020년 5월 26일
편집: Adam Danz 2020년 5월 26일
In the example plot provided in the question, the x axis is the same for both pairs of axes. To use a left and right axes with the same x axis, se yyaxis.
ARI = ones(n,1)./P; % Average Return Interval 1/P
yyaxis left
semilogx((ARI), Q);
yyaxis right
p_1 = polyfit(log(ARI),Q,1); % Linear best fit
f_1 = polyval(p_1,log(ARI));
semilogx(ARI, f_1, '--r');
Q_100yr = polyval(p_1, log(100)) % Q value for 1 in 100 year
  댓글 수: 6
Brian Robinson
Brian Robinson 2020년 5월 28일
Ok well regarding the formatting of the axes. I didn't really want to add more ticks but rather to just change the formatting so that 10^0 would read 1 etc and perhaps just add a few numbers in between where there are existing ticks so we could have 1, 5, 10.
If this is too complex then I won't worry because its not that important.
Thanks,
Brian
Adam Danz
Adam Danz 2020년 5월 28일
I'm assuming you want to maintain the log scale. Otherwise, you could just use plot instead of semilogx. Or,
ax = gca();
ax.XScale = 'linear'; % = 'log' to switch back to log scale
Here's how to change the x tick format from exponential to their log10 values.
ax.XTick = ax.XTick; % important to set the xtick first
ax.XTickLabel = cellstr(num2str(ax.XTick'));
Here's how to specify the number of ticks along the x axis in log space. Note that the ticks here are rounded to the nearest 10th but you can adapt as needed. The first line below produces 6 tics spanning the range of the x axis.
xl = xlim(ax); % xlim cannot contain 0, of course.
newTicks = logspace(log10(xl(1)), log10(xl(2)), 6);
ax.XTick = newTicks;
ax.XTickLabel = cellstr(sprintf('%.1f\n',ax.XTick));
ax.XMinorTick = 'off'; %Turn off minor ticks

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

추가 답변 (1개)

Brian Robinson
Brian Robinson 2020년 5월 29일
Hi Adam,
I have following code to calculate the expected Q value for 100yr event.
ARI_Weibull = ones(n,1)./P_Weibull;% Average Return Interval 1/P
figure
semilogx((ARI_Weibull), Q, 'r');
p_1 = polyfit(log(ARI_Weibull),Q,1); % Linear best fit
f_1 = polyval(p_1,log(ARI_Weibull));
hold on
% ax1 = gca; % Axis for Linear Fit
% ax1.XColor = 'r';
% ax1.YColor = 'r';
% ax1_pos = ax1.Position; % Position of first axes
semilogx(ARI_Weibull,f_1,'--r');
Q_100yr = polyval(p_1, log(100)) % Q value for 1 in 100 year
xline(log(100)) ;
hold off
For the Q_100yr we get 1.1042e4. Then I thought when I plot xline(log(100)) this would correspond to that Q value on the line of best fit but it doesn't. Do you know where I'm going wrong?

카테고리

Help CenterFile Exchange에서 Log Plots에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by