Plot a 2D graph with two x axis

5 views (last 30 days)
Vu Minh
Vu Minh on 22 Nov 2023
Commented: Vu Minh on 24 Nov 2023
Hello everyone,
I am trying to plot an elevation profile of a railway road. I have three type of elevation data at points along the line with uniform distance of 100m.
Basically I can plot the graph for all points with x-axis is km mark and y-axis is the corresponding elevation as attached picture.
So I want to add the second x-axis showing the specific location of stations along the line which is not uniformly distributed as the points.
The atttached excel file is below. Please help me with this. Thank you very much!
figuredir = 'E:\Works\WB\Data';
cd('E:\Works\WB\Data')
%: Read the excel file using readtable function
f = figure;
rawTable1 = readtable('Elevation_points.xls','Sheet','DiemLyTrinh_Metro5');
x = rawTable1.Distance; %: get the excel column, Header1 (header name)
x2 = rawTable1.Mark; %: get the excel column, Header1 (header name)
y1 = rawTable1.TuNhien; %: get the excel column, Header2 (header name)
y2 = rawTable1.ThietKe; %: get the excel column, Header2 (header name)
y3 = rawTable1.MatNuoc; %: get the excel column, Header2 (header name)
x_label = rawTable1.Name_Label;
x2_label = rawTable1.Station;
h(1) = plot(x,y1,'LineWidth',2); grid on
hold on
h(2) = plot(x,y2,'LineWidth',2, 'Color','r');
hold on
h(3) = plot(x,y3,'LineWidth',2, 'Color','g');
yyaxis right
set(gca, 'YTicklabel',[])
set(gca,'ycolor','k')
yyaxis left
ylabel('Elevation (m)','VerticalAlignment','bottom',"FontSize",16,"FontWeight","bold")
ylim([-25 50])
yticks([-25:5:50])
xlim([0 38500])
set(gca,'xtick',[0:500:38500],'xtickLabel',x_label)
ax1 = gca;
ax1.XTickLabelRotation = 45;
a1Pos = get(gca,'Position');
%// Place axis 2 below the 1st.
ax2 = axes('Position',[a1Pos(1) a1Pos(2)-.1 a1Pos(3) a1Pos(4)],'Color','none','YTick',[],'YTickLabel',[],'XTick',[100 1100 2100 3100 3300 4000 5100 6900 8400 8600 10400 11800 13100 14900 15000 16400 18700 19000 19700 21200 22400 23800 26100 26400 30100 32200 34200 36500 38200],'XTickLabel',{'Quần Ngựa';'Kim Mã';'Vành đai 1';'Vành đai 2';'Sông Tô Lịch';'Hoàng Đạo Thúy';'Vành đai 3';'Lê Đức Thọ';'Sông Nhuệ';'Mễ Trì';'Tây Mỗ';'An Khánh 1';'An Khánh 2';'Đê tả Đáy';'Song Phương';'Đê tả Đáy QH';'Sông Đáy';'Đê hữu Đáy';'Sài Sơn';'Quốc Oai','Ngọc Mỹ';'Đồng Bụt';'Đê tả Tích';'Sông Tích';'Đồng Trúc'; 'Đồng Bãi';'Tiến Xuân';'Trại Mới';'Thạch Bình'});
%xticks([100 1100 2100 3100 3300 4000 5100 6900 8400 8600 10400 11800 13100 14900 15000 16400 18700 19000 19700 21200 22400 23800 26100 26400 30100 32200 34200 36500 38200])
%xticklabels({'Quần Ngựa';'Kim Mã';'Vành đai 1';'Vành đai 2';'Sông Tô Lịch';'Hoàng Đạo Thúy';'Vành đai 3';'Lê Đức Thọ';'Sông Nhuệ';'Mễ Trì';'Tây Mỗ';'An Khánh 1';'An Khánh 2';'Đê tả Đáy';'Song Phương';'Đê tả Đáy QH';'Sông Đáy';'Đê hữu Đáy';'Sài Sơn';'Quốc Oai','Ngọc Mỹ';'Đồng Bụt';'Đê tả Tích';'Sông Tích';'Đồng Trúc'; 'Đồng Bãi';'Tiến Xuân';'Trại Mới';'Thạch Bình'})
%set(gca,'xtick',[100 1100 2100 3100 3300 4000 5100 6900 8400 8600 10400 11800 13100 14900 15000 16400 18700 19000 19700 21200 22400 23800 26100 26400 30100 32200 34200 36500 38200],'xticklabel',{'Quần Ngựa';'Kim Mã';'Vành đai 1';'Vành đai 2';'Sông Tô Lịch';'Hoàng Đạo Thúy';'Vành đai 3';'Lê Đức Thọ';'Sông Nhuệ';'Mễ Trì';'Tây Mỗ';'An Khánh 1';'An Khánh 2';'Đê tả Đáy';'Song Phương';'Đê tả Đáy QH';'Sông Đáy';'Đê hữu Đáy';'Sài Sơn';'Quốc Oai','Ngọc Mỹ';'Đồng Bụt';'Đê tả Tích';'Sông Tích';'Đồng Trúc'; 'Đồng Bãi';'Tiến Xuân';'Trại Mới';'Thạch Bình'})
ax1.FontSize = 6
legend('Exist','Design','Surface water',"Location","northwest")

Accepted Answer

Dyuman Joshi
Dyuman Joshi on 24 Nov 2023
Draw a line on the second axes and set its color to none. That shows up the xticks and the xticklabels.
There seems to be some mishap in the column names in the excel file, and the column names you have used in the code to access the data, thus I have taken some random data to use as example.
n=20;
x = (1:n).';
%Random data
y1 = sort(rand(n,1));
y2 = sort(rand(n,1));
y3 = sort(rand(n,1));
h(1) = plot(x,y1,'LineWidth',2);
grid on;
hold on
h(2) = plot(x,y2,'LineWidth',2, 'Color','r');
h(3) = plot(x,y3,'LineWidth',2, 'Color','g');
hold off
yyaxis right
set(gca, 'YTicklabel',[])
set(gca,'ycolor','k')
yyaxis left
ylabel('Elevation (m)','VerticalAlignment','bottom',"FontSize",16,"FontWeight","bold")
%ylim([-25 50])
%yticks([-25:5:50])
%xlim([0 38500])
%set(gca,'xtick',[0:500:38500],'xtickLabel',x_label)
ax1 = gca;
ax1.XTickLabelRotation = 45;
ax1.XTick = x;
ax1.FontSize = 6;
legend(ax1, 'Exist','Design','Surface water',"Location","northwest")
a1Pos = get(gca,'Position');
%Define 2nd set of axes
ax2 = axes('Position',[a1Pos(1) a1Pos(2)-0.05 a1Pos(3) a1Pos(4)]);
%Plot anything with color set to none
plot(ax2, x, y1, 'Color', 'none')
%Modify the axes accordingly
set(ax2, 'Color','none','YTick',[],...
'YTickLabel',[],'XTick', primes(n),...
'XTickLabels', {'List', 'of', 'all', 'prime', 'no.s', 'less', 'than', 'twenty'},...
'Box', 'off', 'FontSize', 8);
%xticks([100 1100 2100 3100 3300 4000 5100 6900 8400 8600 10400 11800 13100 14900 15000 16400 18700 19000 19700 21200 22400 23800 26100 26400 30100 32200 34200 36500 38200])
%xticklabels({'Quần Ngựa';'Kim Mã';'Vành đai 1';'Vành đai 2';'Sông Tô Lịch';'Hoàng Đạo Thúy';'Vành đai 3';'Lê Đức Thọ';'Sông Nhuệ';'Mễ Trì';'Tây Mỗ';'An Khánh 1';'An Khánh 2';'Đê tả Đáy';'Song Phương';'Đê tả Đáy QH';'Sông Đáy';'Đê hữu Đáy';'Sài Sơn';'Quốc Oai','Ngọc Mỹ';'Đồng Bụt';'Đê tả Tích';'Sông Tích';'Đồng Trúc'; 'Đồng Bãi';'Tiến Xuân';'Trại Mới';'Thạch Bình'})
%set(gca,'xtick',[100 1100 2100 3100 3300 4000 5100 6900 8400 8600 10400 11800 13100 14900 15000 16400 18700 19000 19700 21200 22400 23800 26100 26400 30100 32200 34200 36500 38200],'xticklabel',{'Quần Ngựa';'Kim Mã';'Vành đai 1';'Vành đai 2';'Sông Tô Lịch';'Hoàng Đạo Thúy';'Vành đai 3';'Lê Đức Thọ';'Sông Nhuệ';'Mễ Trì';'Tây Mỗ';'An Khánh 1';'An Khánh 2';'Đê tả Đáy';'Song Phương';'Đê tả Đáy QH';'Sông Đáy';'Đê hữu Đáy';'Sài Sơn';'Quốc Oai','Ngọc Mỹ';'Đồng Bụt';'Đê tả Tích';'Sông Tích';'Đồng Trúc'; 'Đồng Bãi';'Tiến Xuân';'Trại Mới';'Thạch Bình'})
  1 Comment
Vu Minh
Vu Minh on 24 Nov 2023
Thank you very much for your response. So the idea is I need to plot another invisible graph to add the second x-axis instead of adding directly. So I accepted your answer!

Sign in to comment.

More Answers (0)

Categories

Find more on Discrete Data Plots in Help Center and File Exchange

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!