Центральный сюжет подзаговора странно масштабируется в Matlab

Я вывожу данные из 9 разных источников на подзаголовок в Matlab. Здесь вы можете увидеть мою фигуру:

введите здесь описание изображения

Каждая строка представляет результаты для определенной переменной при различных условиях. Таким образом, строка 1 является переменной 1, вторая строка переменной 2 и т. д. В любом случае, как вы можете видеть на рисунке, центральный график странно масштабируется по сравнению с двумя другими во второй строке.

Код, который я использовал, включает использование таких команд, как: subplot(3,3,i), imagesc(data), colorbar, colormap(flipud(gray)), title('sometitle'), caxis([limits])

Я попытался исправить центральный график, установив y-пределы с помощью ylim([0.5 3.5]), но это не дало никакого эффекта... когда я попробовал ylim([0 4]), это произошло:

введите здесь описание изображения

Обратите внимание, что данные на графиках в каждой строке имеют матрицы одинакового размера. В строке 1: матрица 7 на 7, в строке 2: матрица 3 на 3 и в строке 3: матрица 4 на 4.

Как я могу решить эту проблему? :)

Спасибо за любую помощь!

ОБНОВИТЬ:

Вот что произошло после того, как я попытался использовать команды:

subplot(3,3,5)
imagesc(data)
axis square
colorbar

введите здесь описание изображения

Вот минимальный рабочий пример: (очевидно, он не дает точно таких же результатов, но с ним все же есть похожие проблемы):

data11 = rand(7,7);
data12 = rand(7,7);
data13 = rand(7,7);
data21 = rand(3,3);
data22 = rand(3,3);
data23 = rand(3,3);
data31 = rand(4,4);
data32 = rand(4,4);
data33 = rand(4,4);
subplot(3,3,1)
imagesc(data11)
colorbar
colormap(flipud(gray))
title('title')
subplot(3,3,2)
imagesc(data12)
colorbar
colormap(flipud(gray))
title('title')
subplot(3,3,3)
imagesc(data13)
colorbar
colormap(flipud(gray))
title('title')
subplot(3,3,4)
imagesc(data21)
colorbar
title('title')
subplot(3,3,5)
imagesc(data22)
colorbar
title('title')
subplot(3,3,6)
imagesc(data23)
colorbar
title('title')
subplot(3,3,7)
imagesc(data31)
colorbar
title('title')
subplot(3,3,8)
imagesc(data32)
colorbar
title('title')
subplot(3,3,9)
imagesc(data33)
colorbar
title('title')

Вы должны получить что-то вроде этого:

введите здесь описание изображения

Обратите внимание, что я ввел команды по отдельности (команда + ввод, команда + ввод и т. д.), а затем я получаю проблему, то есть изображение, которое вы видите в этом посте. Если я скопирую и вставлю весь код (весь код + ввод), у меня не возникнет проблем...


person jjepsuomi    schedule 14.08.2013    source источник
comment
попробуйте добавить axis square после imagesc и посмотрите, решит ли это проблему.   -  person bla    schedule 14.08.2013
comment
Я не знаю, почему это происходит, но что может помочь, так это установить yticks напрямую   -  person Lucius II.    schedule 14.08.2013
comment
+1 Спасибо @natan за помощь, я добавил результаты в пост. Нет помощи :(   -  person jjepsuomi    schedule 14.08.2013
comment
+1 Спасибо @LuciusDomitiusAhenobarbus   -  person jjepsuomi    schedule 14.08.2013
comment
Можете ли вы привести минимальный рабочий пример, чтобы мы могли увидеть, получим ли мы такое же поведение?   -  person bla    schedule 14.08.2013
comment
@natan да, я могу, дай мне несколько минут :)   -  person jjepsuomi    schedule 14.08.2013
comment
@natan MWE добавил :) Не очень оптимизированный код, но он поможет и имитирует ту же процедуру, которую я использовал для решения своей исходной проблемы :)   -  person jjepsuomi    schedule 14.08.2013
comment
вывод вашего кода отлично выглядит на моей машине (matlab 2012a на win-7 64). Кажется, я не могу воссоздать ошибку, которая у вас есть.   -  person bla    schedule 14.08.2013
comment
@natan Я заметил то же самое! :O Вы знаете, я обнаружил (это странно...), что когда я копирую и вставляю код прямо в Matlab и нажимаю Enter, я не понимаю проблемы. Но если я установлю эти команды по отдельности (команда + ввод и т. д.), у меня возникнет проблема?!... Попробуйте... Если вы получите тот же результат...   -  person jjepsuomi    schedule 14.08.2013
comment
извините, он все еще отлично работает на моей машине.   -  person bla    schedule 14.08.2013
comment
@natan Хм, странно :) Ну, кажется, я понял. Мне просто нужно скопировать и вставить весь код и запустить все сразу, а не устанавливать их по отдельности. По какой-то причине у меня возникает проблема. Если я это сделаю... все равно спасибо! :)   -  person jjepsuomi    schedule 14.08.2013


Ответы (1)


Я бы сначала попытался установить «ActivePositionProperty» для каждой оси на «Положение». См. документацию на свойства осей для получения подробной информации.

 h1 = subplot(3,3,1);
 set(h1,'ActivePositionProperty','Position');

 h2 = subplot(3,3,2);
 set(h2,'ActivePositionProperty','Position');

Если это не сработает, вам нужно будет вручную установить свойство position для каждого графика.

 Margin = 0.1
 Width = 1 - 4*Margin;
 Height = 1 - 4*Margin;
 Left = [ (Margin) (2*Margin+Width) (3*Margin+2*Width) ];
 Bottom = [ (Margin) (2*Margin+Height) (3*Margin+2*Height) ];

 h1 = subplot(3,3,1);
 set(h1,'Position', [Left(1) Bottom(3) Width Height]);

 h2 = subplot(3,3,2);
 set(h1,'Position', [Left(2) Bottom(3) Width Height]);

 h3 = subplot(3,3,2);
 set(h1,'Position', [Left(3) Bottom(3) Width Height]);

 h4 = subplot(3,3,2);
 set(h1,'Position', [Left(1) Bottom(2) Width Height]);

 %Etc
person PeterM    schedule 28.08.2013