2015-11-13 2 views
-1

У меня есть в общей сложности 4 подзаголовка. 1-й и 3-й являются фактическими сигналами, а 2-й и 4-й являются их соответствующими тактовыми сигналами, то есть они равны 0 или 1. Проблема с подзаговорами заключается в том, что все графики имеют одинаковую высоту. Но я хочу, чтобы высота тактовых сигналов была мала по сравнению с фактическими сигналами. и соответствующие тактовые сигналы должны быть чуть ниже их фактических сигналов. Я бы изложил свои требования:Можно ли изменить высоту подзаголовка?

  1. Уменьшение высоты подзаголовки тактовых сигналов (т. Е. Второго и четвертого подзаговоров).
  2. Сокращение разрыва между двумя первыми двумя подзаголовками и двумя последними подсплеями.

Любой, кто мог бы помочь мне с этим? Спасибо заранее.

+0

Для управления полей и промежутков между подзаговорами, взглянуть на [tight_subplot функции] (http://www.mathworks.com/matlabcentral/fileexchange/27991-tight-subplot) при обмене файлами Mathworks. Я использую его почти исключительно даже для одноосных графиков, чтобы избавиться от раздражающего пробела вокруг осей. – mikkola

+0

Я пробовал это, но не помогал ... он дает ошибку «Неопределенная функция« tight_subplot »для входных аргументов типа« double ».» Не могли бы вы подробнее рассказать о решении ... @mikkola –

ответ

2

Вы должны немного поиграть с gca и его 'свойствами'. Очень простой пример, как:

clc, clear, close all 
x = -2*pi:0.01:2*pi; 
y=sin(x); 

subplot(2,1,1);plot(x,y);   % plot the first subplot 
subplot(2,1,2);plot(x,y,'r');  % plot the second one 

A = get(gca,'position');   % gca points at the second one 
A(1,4) = A(1,4)/2;    % reduce the height by half 
A(1,2) = A(1,2) + A(1,4);   % change the vertical position 
set(gca,'position',A);   % set the values you just changed 

enter image description here

+0

Привет. Код работает нормально, но если я добавлю дополнительные подзаголовки, а затем увеличу размер первого графика, то он не поместится в полях. Есть ли способ увеличить верхнюю границу фигуры Matlab? @NKN –

2

Вы можете отрегулировать размер, изменив способ индексирования подзаговоров. Если вы используете subplot(4, 1, 1), subplot(4, 1, 2) и т. Д., То все они будут иметь одинаковую высоту. Однако, если вы используете subplot(6, 1, 1:2), subplot(6, 1, 3) и т. Д., То первый подзаголовок будет иметь в два раза больше высоты второго.

Для регулировки potition между участками, вы можете настроить position свойство осей следующим образом:

figure 
t = 1:0.1:10; 

for i = 1:4 
    switch i 
     case 1 
      subplot(6, 1, 1:2) 
     case 2 
      subplot(6, 1, 3) 
     case 3 
      subplot(6, 1, 4:5) 
     case 4 
      subplot(6, 1, 6) 
    end 

    plot(t, sin(i * t)); 

    if i == 1 || i == 3 
     set(gca, 'xtick', []); 

     p = get(gca, 'Position'); 
     % Increase the height of the first and third subplots by 10% 
     p_diff = p(4) * 0.1; 
     % Increase the height of the subplot, but this will keep the 
     % bottom in the same place 
     p(4) = p(4) + p_diff; 
     % So also move the subplot down to decrease the gap to the next 
     % one. 
     p(2) = p(2) - p_diff; 
     set(gca, 'Position', p); 
    end 
end 

Выход:

enter image description here

Вы можете получить гораздо более творческим с этим по мере необходимости, но это должно вас начать.

+0

Вы мастер. Это именно то, что я искал (метод «rowspan» для изменения относительных пропорций). – techdude

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