#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
причины, по которым некоторые из них не выполняют свою работу?