2015-06-05 4 views
0

Я рисую несколько тепловых карт в Matlab 3014b, используя imagesc с одним общим colorbar. Вот мой код:Ошибка оси Matlab с использованием изображенийc

a(1)= subplot('Position',[0.1, 0.65, 0.3, 0.3]); 
data1 = rand(5); 
imagesc(data1) 
ax = gca; 
ax.XTick = [1 2 3 4 5 6]; 
ax.XTickLabel = {'0','0.1', '0.2', '0.3','0.4','0.5'}; 
ax.YTick = [1 2 3 4 5 6]; 
ax.YTickLabel = {'1','10', '100', '1000', '10000', '100000'}; 

a(2)= subplot('Position',[0.45, 0.65, 0.3, 0.3]); 
data2 = rand(5); 
imagesc(data2) 
ax = gca; 
ax.XTick = [1 2 3 4 5 6]; 
ax.XTickLabel = {'0','0.1', '0.2', '0.3','0.4','0.5'}; 
ax.YTick = [1 2 3 4 5 6]; 
ax.YTickLabel = {'1','10', '100', '1000', '10000', '100000'}; 

h=colorbar; 
set(h, 'Position', [.8 .135 .0581 .8150]) 
for i=1:2 
     pos=get(a(i), 'Position'); 
     set(a(i), 'Position', [pos(1) pos(2)]); 
end 

Но я получаю следующее сообщение об ошибке:

Error using matlab.graphics.axis.Axes/set 
While setting the 'Position' property of Axes: 
Value must be a 4 element vector 

Не совсем уверен, как решить эту проблему? Благодаря!

ответ

1

Ошибка здесь:

for i=1:2 
     pos=get(a(i), 'Position'); 
     set(a(i), 'Position', [pos(1) pos(2)]); %// <--- here 
end 

Есть ли конкретная причина, почему вы усечения двух последних элементов? Position должен быть 4-элементным вектором, в котором первые два элемента определяют расстояние от нижнего левого угла контейнера до нижнего левого угла осей, а третий и четвертый элементы - это ширина и высота осей в пределах окно. Если это ваше намерение возможно сохранить все оси та же ширина/высота, сделать что-то вроде этого:

for i=1:2 
     pos=get(a(i), 'Position'); 
     set(a(i), 'Position', [pos(1) pos(2) 1 1]); %// Change 
end 

Ознакомьтесь с документацией по MathWorks по осям свойств ... Position специально здесь: http://www.mathworks.com/help/matlab/ref/axes-properties.html#zmw57dd0e52524

Смежные вопросы