Effacer les filtres
Effacer les filtres

I want to 3 different plot on same figure with different axis?

24 vues (au cours des 30 derniers jours)
Sahil Wani
Sahil Wani le 12 Fév 2023
Modifié(e) : DGM le 12 Fév 2023
I want to 3 different plot on same figure with different axis?
Matlab code is attached and .mat file is also attached.
Let me know if we can plot 3 plot in one figure using different xaxis. And the final result should look like as in attached figure
clc;clear;
load("pcdeffect.mat");load("meffect.mat");load("ueffect.mat");
ratepcd = pcdeffect(1975,:);
x1 = [1:1:5];
y1 = ratepcd(1,[1,4,7,10,13]+1);
z1 = ratepcd(1,[1,4,7,10,13]+2);
figure(1)
set(gcf, 'Units', 'inches', 'Position', [2 2 15 5.5])
subplot(1,2,1)
hold on
plot(x1,y1,'d-r','Linewidth', 2, 'Markersize', 10);
set(gca, 'Fontname','Times New Roman','Fontsize', 20);
grid on; box on; ax = gca; ax.LineWidth=1;
ylabel('$y$','interpreter','latex','Fontname','Times New Roman','Fontsize', 20)
xlabel('$\epsilon_a$ (\%)','interpreter','latex','Fontname','Times New Roman','Fontsize', 20)
xticklabels({'Case 1','Case 2','Case 3','Case 4','Case 5' })
a=xlim;b=ylim;
xx = a(2)-a(1);yy = b(2)-b(1);
text(a(1)-1/8*xx,b(1)-1/8*yy,'(a)','interpreter','latex','Fontname','Times New Roman','FontSize',20);
subplot(1,2,2)
hold on
plot(x1,z1,'d-r','Linewidth', 2, 'Markersize', 10);
set(gca, 'Fontname','Times New Roman','Fontsize', 20);
grid on; box on; ax = gca; ax.LineWidth=1;
ylabel('$y$ ','interpreter','latex','Fontname','Times New Roman','Fontsize', 20)
xlabel('$\epsilon_a$ (\%)','interpreter','latex','Fontname','Times New Roman','Fontsize', 20)
xticklabels({'Case 1','Case 2','Case 3','Case 4','Case 5' })
a=xlim;b=ylim;
xx = a(2)-a(1);yy = b(2)-b(1);
text(a(1)-1/8*xx,b(1)-1/8*yy,'(b)','interpreter','latex','Fontname','Times New Roman','FontSize',20);
%
ratem = meffect(1974,:);
x1 = 0.49*[1,2,4,8,16];
y1 = ratem(1,[1,4,7,10,13]+1);
z1 = ratem(1,[1,4,7,10,13]+2);
figure(2)
set(gcf, 'Units', 'inches', 'Position', [2 2 15 5.5])
subplot(1,2,1)
hold on
plot(x1,y1,'o-g','Linewidth', 2, 'Markersize', 10);
set(gca, 'Fontname','Times New Roman','Fontsize', 20);
grid on; box on; ax = gca; ax.LineWidth=1;
ylabel('$y$','interpreter','latex','Fontname','Times New Roman','Fontsize', 20)
xlabel('$m$','interpreter','latex','Fontname','Times New Roman','Fontsize', 20)
a=xlim;b=ylim;
xx = a(2)-a(1);yy = b(2)-b(1);
text(a(1)-1/8*xx,b(1)-1/8*yy,'(a)','interpreter','latex','Fontname','Times New Roman','FontSize',20);
subplot(1,2,2)
hold on
plot(x1,z1,'o-g','Linewidth', 2, 'Markersize', 10);
set(gca, 'Fontname','Times New Roman','Fontsize', 20);
grid on; box on; ax = gca; ax.LineWidth=1;
ylabel('$y$ ','interpreter','latex','Fontname','Times New Roman','Fontsize', 20)
xlabel('$m$ ','interpreter','latex','Fontname','Times New Roman','Fontsize', 20)
a=xlim;b=ylim;
xx = a(2)-a(1);yy = b(2)-b(1);
text(a(1)-1/8*xx,b(1)-1/8*yy,'(b)','interpreter','latex','Fontname','Times New Roman','FontSize',20);
%
rateu = ueffect(1979,:);
x1 = 3.84*[1,2,4,8,16];
y1 = rateu(1,[1,4,7,10,13]+1);
z1 = rateu(1,[1,4,7,10,13]+2);
figure(3)
set(gcf, 'Units', 'inches', 'Position', [2 2 15 5.5])
subplot(1,2,1)
hold on
plot(x1,y1,'s-m','Linewidth', 2, 'Markersize', 10);
set(gca, 'Fontname','Times New Roman','Fontsize', 20);
grid on; box on; ax = gca; ax.LineWidth=1;
ylabel('$y$','interpreter','latex','Fontname','Times New Roman','Fontsize', 20)
xlabel('$u$','interpreter','latex','Fontname','Times New Roman','Fontsize', 20)
a=xlim;b=ylim;
xx = a(2)-a(1);yy = b(2)-b(1);
text(a(1)-1/8*xx,b(1)-1/8*yy,'(a)','interpreter','latex','Fontname','Times New Roman','FontSize',20);
subplot(1,2,2)
hold on
plot(x1,z1,'s-m','Linewidth', 2, 'Markersize', 10);
set(gca, 'Fontname','Times New Roman','Fontsize', 20);
grid on; box on; ax = gca; ax.LineWidth=1;
ylabel('$y$ ','interpreter','latex','Fontname','Times New Roman','Fontsize', 20)
xlabel('$u$ ','interpreter','latex','Fontname','Times New Roman','Fontsize', 20)
a=xlim;b=ylim;
xx = a(2)-a(1);yy = b(2)-b(1);
text(a(1)-1/8*xx,b(1)-1/8*yy,'(b)','interpreter','latex','Fontname','Times New Roman','FontSize',20);
  2 commentaires
Adam Danz
Adam Danz le 12 Fév 2023
> I want to 3 different plot on same figure with different axis?
TL;DR
Why are you using subplot(1,2,n) which only produces 2 axes?
Sahil Wani
Sahil Wani le 12 Fév 2023
I think the question was not clear enough. I have added a graphical figure which i want to final achive via matlab. You can have look at the image.

Connectez-vous pour commenter.

Réponses (2)

DGM
DGM le 12 Fév 2023
Modifié(e) : DGM le 12 Fév 2023
This is an example of two subplots using axisxx() from the link I posted earlier.
% figure setup
figure(1)
Panel1 = uipanel('Parent', gcf, 'BorderType', 'none');
Panel2 = uipanel('Parent', gcf, 'BorderType', 'none');
set(Panel1, 'Position', [0 0 0.5 1], 'Units', 'normalized');
set(Panel2, 'Position', [0.5 0 0.5 1], 'Units', 'normalized');
% create axes (the subplots)
ax1 = axes('Parent', Panel1);
ax2 = axes('Parent', Panel2);
% subplot 1 setup
axes(ax1);
y = linspace(0, 2*pi, 100);
x1 = 180 * y / pi;
x2 = sin(y);
x3 = cos(y);
hp = plot(x1,y,'k');
xx1 = axisxx(x2,y,'r-');
xx2 = axisxx(x3,y,'b-');
xdesc = {'y (degrees)','sin(y)','cos(y)'};
ylabel('y (radians)');
xlabel(xdesc{1});
xx1.XLabel = xdesc{2};
xx2.XLabel = xdesc{3};
legend(xdesc);
% subplot 2 setup
axes(ax2);
y = linspace(0, 2*pi, 100);
x1 = 180 * y / pi;
x2 = 2*sin(y);
x3 = 3*cos(y);
hp = plot(x1,y);
xx1 = axisxx(x2,y,'r--');
xx2 = axisxx(x3,y,'b:');
xdesc = {'y (degrees)','2*sin(y)','3*cos(y)'};
ylabel('y (radians)');
xlabel(xdesc{1});
xx1.XLabel = xdesc{2};
xx2.XLabel = xdesc{3};
legend(xdesc);
Again, note the comments on the FEX page. Axisxx() is unmaintained and the callbacks for dynamic resizing are broken. I've already commented them out in the attached files, but you'll have no dynamic resizing. Similarly, if you try to add a colorbar object, it will break.
Axisxx() handles subplots by creating them in uipanel() objects, so that's an extra complication. I don't see any way to manipulate whether the scale appears on the top or bottom, so I edited line 17 of axisxx.m to always place it on the bottom. Feel free to edit that.
There are probably other things that don't work.

Image Analyst
Image Analyst le 12 Fév 2023
"I want to 3 different plot on same figure with different axis? " Solution, use subplot(2,2,n) or nexttile
subplot(2, 2, 1);
plot(x1, y1, '-', 'LineWidth', 2);
subplot(2, 2, 2);
plot(x2, y2, '-', 'LineWidth', 2);
subplot(2, 2, 3);
plot(x3, y3, '-', 'LineWidth', 2);
" plot 3 plot in one figure using different xaxis." using same axes:
plot(x1, y1, '-', 'LineWidth', 2);
hold on;
plot(x2, y2, '-', 'LineWidth', 2);
legend('Data set 1', 'Data set 2');
  5 commentaires
Image Analyst
Image Analyst le 12 Fév 2023
Sorry, addaxis() is not my program. Contact the author.
DGM
DGM le 12 Fév 2023
If you want to use unmaintained FEX tools, you have to be willing to fix them. Check the comments on the FEX page. If you want to use addaxis, you'll have to change that line to 'colororder' instead of the abbreviated 'colorord', which is no longer supported. I don't remember if that's the only instance that you'll need to edit.
That said, addaxis() can only add extra y-axis scales to the figure. It could be adapted to work on x-axis, but that's an entire project. The concept that addaxis() uses is to simply plot everything in the first axes object, but create dummy axes and manipulate their positions to create the extra scales.
There are some other old FEX tools that ostensibly do what you want:
... but that is also unmaintained and may require work as well.
If you only want two scales, then the existing tools would work:
... but you want three.

Connectez-vous pour commenter.

Produits


Version

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by