Команда MATLAB `удержание » приводит к неправильной настройке свойств осей xlim и ylim

#matlab

Вопрос:

У нас есть этот код ниже:

 hFigure = figure( 'position', [ 100 100 600 600 ] ); hAxes1 = axes( 'parent', hFigure, 'units', 'pixels', 'position', [ 50 350 200 200 ] ); hAxes2 = axes( 'parent', hFigure, 'units', 'pixels', 'position', [ 350 350 200 200 ] ); hAxes3 = axes( 'parent', hFigure, 'units', 'pixels', 'position', [ 50 50 200 200 ] ); hAxes4 = axes( 'parent', hFigure, 'units', 'pixels', 'position', [ 350 50 200 200 ] );  img = zeros( 200, 200, 3 ); imshow( img, 'parent', hAxes1 ); imshow( img, 'parent', hAxes2 ); imshow( img, 'parent', hAxes3 ); imshow( img, 'parent', hAxes4 );  

Очевидно, что при запуске кода отобразится фигура с четырьмя черными квадратами одинакового размера, расположенными в сетке 2 х 2. Однако, если мы добавим hold on команду до того, как покажем img переменную в осях:

 hFigure = figure( 'position', [ 100 100 600 600 ] ); hAxes1 = axes( 'parent', hFigure, 'units', 'pixels', 'position', [ 50 350 200 200 ] ); hAxes2 = axes( 'parent', hFigure, 'units', 'pixels', 'position', [ 350 350 200 200 ] ); hAxes3 = axes( 'parent', hFigure, 'units', 'pixels', 'position', [ 50 50 200 200 ] ); hAxes4 = axes( 'parent', hFigure, 'units', 'pixels', 'position', [ 350 50 200 200 ] );  img = zeros( 200, 200, 3 ); hold on; imshow( img, 'parent', hAxes1 ); imshow( img, 'parent', hAxes2 ); imshow( img, 'parent', hAxes3 ); imshow( img, 'parent', hAxes4 );  

На последних осях hAxes4 , которые находятся в правом нижнем углу, будет показан черный квадрат с неправильным размером. В идеале XLim YLim оба свойства и должны быть [0 200] , но теперь , с hold on добавлением команды, эти два свойства становятся [0 250] каждым и только для hAxes4 .

Я предполагаю, что причина в том, что, когда hAxes4 создается последнее, gca всегда hAxes4 после этого. Следовательно, использование hold on будет работать только дальше hAxes4 , но почему это приводит к тому, что его XLim и YLim корректируется таким своеобразным образом?

Комментарии:

1. Ваше предположение верно, hold on применимо только к текущим осям. Вы должны сесть hold on после imshow . Почему это 250, я могу только догадываться, что внутри что-то вроде дефолта imshow . Почему hold on влияет imshow именно так, а не, например, plot ? Кто знает! Вероятно imshow , вызывает несколько функций построения графиков, и hold on причины, по которым некоторые из них не выполняют свою работу?