How to add a second , upper x axis and control the value's locations and text?

Hi all,
My code generates simple plot and I would like to add a second x-axis with the same scaling as in the first one. However, I cannot seem to control the locations and text where values are placed, from some reason. I would be happy to get your help.
Here is my code:
x = 1:10
y = x.^2;
%
plot(x,y)
xlabel('vector 1')
ylabel('vector 2')
ax1 = gca;
% handle second X-axis
ax2 = axes('Position',get(ax1,'Position'),'XAxisLocation','top','YAxisLocation','right','Color','none','XColor','k','YColor','k');
k=get(ax1,'XTick');
l=get(ax1,'Position');
set(ax2,'YTick',([]));
Thanks!
Ron

 Accepted Answer

Are you trying to do something like this
x = 1:10;
y = x.^2;
%
ax1 = axes();
box(ax1);
xlabel('vector 1')
ylabel('vector 2')
plot(x,y)
% handle second X-axis
ax2 = axes('Position', get(ax1,'Position'), ...
'XAxisLocation','top', ...
'Color','none', ...
'XColor','k');
ax2.YAxis.Visible = 'off';
ax2.XLim = ax1.XLim;
also add the following line if you want the x-limits to be automatically linked
linkprop([ax1 ax2], 'XLim')

4 Comments

Hi Ameer,
thank you for your answer. This is indeed what I would like to doo, however can the numbers on the second x axis be edited? for example, change the 1 to 10^0, and delete some of the numbers.
anyone? can't seem to find any available answer on this forum....
I found a solution, if anyone is intersted:
%%
axes2 = axes('Parent',figure_name,...
'Position',[0.14 0.15 0.77 0.78]);
xlim(axes2,[xlim1 xlim2]);
% Set the remaining axes properties
set(axes2,'Color','none','XAxisLocation','top','XColor',[0 0 0],...
'XMinorTick','on','XScale','log','XTick',[1 1000 1e6],...
'XTickLabel',{'1 year','1000 years','10^{6} years'});
set(axes2,'YTickLabel',[],'Ytick',[],'Ycolor',[1 1 1])
%%
I thought that you wanted the same x limits. I am glad that you found the solution. The following code shows an alternate way.
x = 1:10;
y = x.^2;
%
ax1 = axes();
box(ax1);
xlabel('vector 1')
ylabel('vector 2')
plot(x,y)
% handle second X-axis
ax2 = axes('Position', get(ax1,'Position'), ...
'XAxisLocation','top', ...
'Color','none', ...
'XColor','k');
ax2.YAxis.Visible = 'off';
ax2.XLim = [1 1e6];
ax2.XTick = [1 1e3 1e6];
ax2.XTickLabel = {'1 year','1000 years','10^{6} years'};
ax2.XScale = 'log';

Sign in to comment.

More Answers (0)

Categories

Tags

Community Treasure Hunt

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

Start Hunting!