
How to have a same size of the image with out distortion in a subplot along with the graph?
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Vishnuvardhan Naidu Tanga
am 4 Jul. 2025
Bearbeitet: Mathieu NOE
am 7 Jul. 2025
Hello all,
I am trying to place an image along with a plot in subplot. But when i am trying to plot the image is small compared to the size of the plot. I need both of them to be in the same size. I also used "imagesc(img);" , but the image looks distorted. Please help me with this. Thanks in advance.
My code:
set(0,'Units','pixels');
scrsz = get(0,'ScreenSize');
scr_width = scrsz(3);
scr_heigth = scrsz(4);
img = imread('Geometry.jpg');
Z = readtable('Fig1.xlsx');
alpha = 0.1;
figure('Position', round([alpha*scr_width alpha*scr_heigth (1-2*alpha)*scr_width (1-2*alpha)*scr_heigth ]));
% 1. Image subplot
subplot(1,4,1);
% imagesc(img);
imshow(img);
axis off
data = table2array(Z) ;
subplot(1,4,2)
plot(data(:,1), data(:,2), 'k','linewidth', 2);
hold off
grid on
xlabel('xxx');
ylabel('yyy');
subplot(1,4,3)
plot(data(:,3), data(:,4), 'linewidth', 2);
hold on
str = '#0072BD';
color = sscanf(str(2:end),'%2x%2x%2x',[1 3])/255;
plot(data(:,5), data(:,6), '*', 'Color', color, 'linewidth', 2);
hold on
plot(data(:,7), data(:,8), 'linewidth', 2);
hold on
str = '#EDB120';
color = sscanf(str(2:end),'%2x%2x%2x',[1 3])/255;
plot(data(:,9), data(:,10), '*', 'Color', color, 'linewidth', 2);
hold on
plot(data(:,11), data(:,12), 'linewidth', 2);
hold on
str = '#77AC30';
color = sscanf(str(2:end),'%2x%2x%2x',[1 3])/255;
plot(data(:,13), data(:,14), '*', 'Color', color, 'linewidth', 2);
hold on
plot(data(:,15), data(:,16), 'linewidth', 2);
hold on
str = '#A2142F';
color = sscanf(str(2:end),'%2x%2x%2x',[1 3])/255;
plot(data(:,17), data(:,18), '*', 'Color', color, 'linewidth', 2);
hold off
% legend('Wygnanski&Fiedler (1969)', 'Standard k-\in', 'RNG k-\in', 'Realizable k-\in',...
% 'SST k-\omega', 'Location', 'northeast');
grid on
xlabel('xxx');
ylabel('yyy');
subplot(1,4,4)
plot(data(:,19), data(:,20), 'linewidth', 2);
hold on
str = '#0072BD';
color = sscanf(str(2:end),'%2x%2x%2x',[1 3])/255;
plot(data(:,21), data(:,22), '*', 'Color', color, 'linewidth', 2);
hold on
plot(data(:,23), data(:,24), 'linewidth', 2);
hold on
str = '#EDB120';
color = sscanf(str(2:end),'%2x%2x%2x',[1 3])/255;
plot(data(:,25), data(:,26), '*', 'Color', color, 'linewidth', 2);
hold on
plot(data(:,27), data(:,28), 'linewidth', 2);
hold on
str = '#77AC30';
color = sscanf(str(2:end),'%2x%2x%2x',[1 3])/255;
plot(data(:,29), data(:,30), '*', 'Color', color, 'linewidth', 2);
hold on
plot(data(:,31), data(:,32), 'linewidth', 2);
hold on
str = '#A2142F';
color = sscanf(str(2:end),'%2x%2x%2x',[1 3])/255;
plot(data(:,33), data(:,34), '*', 'Color', color, 'linewidth', 2);
hold off
% legend('Wygnanski&Fiedler (1969)', 'Standard k-\in', 'RNG k-\in', 'Realizable k-\in',...
% 'SST k-\omega', 'Location', 'northeast');
grid on
xlabel('xxx');
ylabel('yyy');
0 Kommentare
Akzeptierte Antwort
Mathieu NOE
am 4 Jul. 2025
hello
there is a very detailled example here how to manage subplots dimensions (if you want to master it)
here I offer a quick and simple solution by making the figure "wider" so that both subplots appear more alike in size
here's my result so far :

I didn't notice any difference here between imagesc and imshow
set(0,'Units','pixels');
scrsz = get(0,'ScreenSize');
scr_width = scrsz(3);
scr_heigth = scrsz(4);
img = imread('Geometry.jpg');
Z = readtable('trail.xlsx');
alpha = 0.1;
figure('Position', round([alpha*scr_width alpha*scr_heigth (1-2*alpha)*scr_width (1-2*alpha)*scr_heigth ]));
% 1. Image subplot
subplot(1,2,1);
% imagesc(img);
imshow(img);
axis off
data = table2array(Z) ;
subplot(1,2,2)
plot(data(:,1), data(:,2), 'k','linewidth', 2);
hold off
grid on
xlabel('xxx');
ylabel('yyy');
%% optionnal (try)
% pbaspect([1 1 1]) % Make the x-axis, y-axis equal lengths
% daspect([1 1 1]); % equal lengths in all directions
5 Kommentare
Mathieu NOE
am 6 Jul. 2025
Bearbeitet: Mathieu NOE
am 7 Jul. 2025
hello again
tried to find a good balance ... you can opt for the automatic tuning or the manual settings (factor "a" that allows a different width to the image plot axis) - see what works for you
I believe with a = 1.5 I have the best rendering :

img = imread('Geometry.jpg');
[m,n] = size(img);
h2w_ratio = n/m;
Z = readtable('Fig1.xlsx');
data = table2array(Z) ;
%%
f = figure('Units','normalized','Position', [0.1 0.1 0.8 0.8]);
height = 0.6;
hs = 0.05; % horizontal separation
left = hs;
width = 1-2*left;
bottom = 0.5 - height/2;
N = 4; % nb of subplots = axes
%% increase width of first axe by factor a
% if we want to equal height to width ratios between image and plot axes , this
% means for the 1st axe : height/(a*w) = h2w_ratio
% combined with : w = (width - (N-1)*hs)/(a + (N-1));
% we obtain the optimal a value as :
a = height/h2w_ratio*(N-1)/(width - (N-1)*hs - height/h2w_ratio); % automatic tuning
a = 1.5; % manual tuning
w = (width - (N-1)*hs)/(a + (N-1));
% create first axe with specific dimensions
ax(1) = axes(f,'Position',[left bottom a*w height]);
left = left + a*w + hs;
% then the rest with same dims
for k = 2:N
ax(k) = axes(f,'Position',[left bottom w height]);
left = left + w + hs;
end
% 1. Image subplot
% subplot(1,4,1);
imshow(img, 'Parent', ax(1));
axis off
% subplot(1,4,2)
axes(ax(2)); % Activate the 2nd axes
plot(data(:,1), data(:,2), 'k','linewidth', 2);
hold off
grid on
xlabel('xxx');
ylabel('yyy');
% subplot(1,4,3)
axes(ax(3)); % Activate the 3rd axes
plot(data(:,3), data(:,4), 'linewidth', 2);
hold on
str = '#0072BD';
color = sscanf(str(2:end),'%2x%2x%2x',[1 3])/255;
plot(data(:,5), data(:,6), '*', 'Color', color, 'linewidth', 2);
hold on
plot(data(:,7), data(:,8), 'linewidth', 2);
hold on
str = '#EDB120';
color = sscanf(str(2:end),'%2x%2x%2x',[1 3])/255;
plot(data(:,9), data(:,10), '*', 'Color', color, 'linewidth', 2);
hold on
plot(data(:,11), data(:,12), 'linewidth', 2);
hold on
str = '#77AC30';
color = sscanf(str(2:end),'%2x%2x%2x',[1 3])/255;
plot(data(:,13), data(:,14), '*', 'Color', color, 'linewidth', 2);
hold on
plot(data(:,15), data(:,16), 'linewidth', 2);
hold on
str = '#A2142F';
color = sscanf(str(2:end),'%2x%2x%2x',[1 3])/255;
plot(data(:,17), data(:,18), '*', 'Color', color, 'linewidth', 2);
hold off
% legend('Wygnanski&Fiedler (1969)', 'Standard k-\in', 'RNG k-\in', 'Realizable k-\in',...
% 'SST k-\omega', 'Location', 'northeast');
grid on
xlabel('xxx');
ylabel('yyy');
% subplot(1,4,4)
axes(ax(4)); % Activate the 4th axes
plot(data(:,19), data(:,20), 'linewidth', 2);
hold on
str = '#0072BD';
color = sscanf(str(2:end),'%2x%2x%2x',[1 3])/255;
plot(data(:,21), data(:,22), '*', 'Color', color, 'linewidth', 2);
hold on
plot(data(:,23), data(:,24), 'linewidth', 2);
hold on
str = '#EDB120';
color = sscanf(str(2:end),'%2x%2x%2x',[1 3])/255;
plot(data(:,25), data(:,26), '*', 'Color', color, 'linewidth', 2);
hold on
plot(data(:,27), data(:,28), 'linewidth', 2);
hold on
str = '#77AC30';
color = sscanf(str(2:end),'%2x%2x%2x',[1 3])/255;
plot(data(:,29), data(:,30), '*', 'Color', color, 'linewidth', 2);
hold on
plot(data(:,31), data(:,32), 'linewidth', 2);
hold on
str = '#A2142F';
color = sscanf(str(2:end),'%2x%2x%2x',[1 3])/255;
plot(data(:,33), data(:,34), '*', 'Color', color, 'linewidth', 2);
hold off
% legend('Wygnanski&Fiedler (1969)', 'Standard k-\in', 'RNG k-\in', 'Realizable k-\in',...
% 'SST k-\omega', 'Location', 'northeast');
grid on
xlabel('xxx');
ylabel('yyy');
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Graphics Performance finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!