Hi all,
I would like to get my subplots the same size. It now defaults to the first picture below, but I would like to have it as in the second picture (created by manually sizing the figure). How to modify my code? Thanks for the help. The search function did not answer my question.
clear all; clc;
dt = 0.01;
time = 0;
iter_limit = 1000;
iter = 0;
next_initial = [0 0]; % [angle [rad] , angular velocity [rad/sec]];
ode45_check_initial = next_initial;
torque = 0;
torque_setting = 2;
x1_save=[];
x2_save=[];
time_save=[];
torque_save=[];
h=figure(1);
subplot(1,2,1); hold on;
fig_animation=plot(0,0,'k',0, -1,'.k','MarkerSize',20);
axis equal;
xlim([-1.5 1.5]);
ylim([-1.5 1.5]);
xlabel('x [m]');
ylabel('y [m]');
fig_rectangle=rectangle('Position',[-0.05 -0.05 0.1 0.1],'FaceColor','k');
subplot(1,2,2); hold on; grid on;
fig_timeplot=plot(0,0,'b',0,0,'r',0,0,'k');
hold on;
xlim([ 0 iter_limit*dt]);
ylim([-1.5*pi 1.5*pi]);
xlabel('time [s]');
ylabel('amplitude [-]');
legend('angle [rad]','angular velocity [rad/s]','applied torque [Nm]');
hold off;

1 comentario

Zhongzheng Wang
Zhongzheng Wang el 28 de Mzo. de 2022
HI! I am wondering if you solved this problem. I met the same issue.

Iniciar sesión para comentar.

 Respuesta aceptada

Yazan
Yazan el 22 de Jul. de 2021

0 votos

Because you are requesting to use the same length for the data units along each axis when you specified
axis equal
Matlab will not provide axes of the same width and height. A simple solution is to remove the line above.

6 comentarios

Yazan
Yazan el 22 de Jul. de 2021
Generally, if ax1 and ax2 are handles of axes, you can make the axes have the same width and height using:
ax2.Position = [ax2.Position(1:2) ax1.Position(3:4)];
This, however, will not work in your example as long as you are using
axis equal
Jurrien Plijter
Jurrien Plijter el 23 de Jul. de 2021
Thank you for your reply. I do understand that axis equal is the cause of the problem, but I really can't accept that deleting that line is the only option. As mentioned, I am happy with a result as shown in my second figure, which i scaled manually with the mouse. The fact that that is possible, indicates for me that there should be a way to hardcode those figure properties.
Yazan
Yazan el 23 de Jul. de 2021
So you need to use equal axes only for the first subplot or for both??
Jurrien Plijter
Jurrien Plijter el 23 de Jul. de 2021
Only the first, left one, plot. That plot will show the movement of a dynamic system. Equal axis is essential. The right one doesn't matter that much.
Yazan
Yazan el 23 de Jul. de 2021
Editada: Yazan el 23 de Jul. de 2021
Then a very simple solution is simply to increase the size of your figure, as you are doing manually by the mouse.
When you initiate your figure, use the following for example:
h = figure('Units', 'normalized', 'Position', [0.12 0.35 0.68 0.5]);
Generally, you can control the position, height, and width f the figure, and also axes. Read here and here. If you want to force two axes to have the same height and width, you can use the following:
% ax1 and ax2 are axes handles
ax1.Position(3:4) = ax2.Position(3:4);
Matlab however will override this command if this size of your figure does not allow having axes of the specified size.
Jurrien Plijter
Jurrien Plijter el 23 de Jul. de 2021
yeah I tried the ax1.position stuff earlier, but that indeed didn't work. Using figure(...) does work however, thanks for that! :)

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Graphics Performance en Centro de ayuda y File Exchange.

Productos

Versión

R2018b

Preguntada:

el 22 de Jul. de 2021

Comentada:

el 28 de Mzo. de 2022

Community Treasure Hunt

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

Start Hunting!

Translated by