Как добавить расстояние между гистограммами - PullRequest
3 голосов
/ 29 апреля 2019

Я хотел бы указать p-значения между несколькими гистограммами, как показано на рисунке ниже:

Input 1

Но я не нашел соответствующих команд оэто на странице MATLAB на гистограммах.

Вот мой код для гистограмм и графики стандартного отклонения:

x = 1:3;
y = [17.5, 97.5, 100];
std = [23.84848004, 10.89724736, 0];

figure
hold on
bar(x,y)
errorbar(y,std,'.')

XTickLabel={'1' ; '2'; '3' ; '4'};
XTick=2:4:15
set(gca, 'XTick',XTick);
set(gca, 'XTickLabel', XTickLabel);

1 Ответ

9 голосов
/ 29 апреля 2019

Нет такой функции, о которой я знаю, но ее легко написать:

function [hl,ht] = overbar(x1, x2, y, txt)
sz = get(gca,'FontSize');
bg = get(gca,'Color');
d = 2; % size of hook, change depending on y axis scaling
hl = line([x1,x1,x2,x2], [y,y+d,y+d,y]);
ht = text((x1+x2)/2, y+d, txt, ...
          'HorizontalAlignment','center', ...
          'VerticalAlignment','middle', ...
          'FontSize',sz, ...
          'BackgroundColor',bg);
end

Эта функция использует размер шрифта и свойства цвета осей, чтобы определить способ рисования текста. Сначала он рисует линию, затем рисует текст сверху, используя сплошной фон, так что линия кажется прерванной текстом.

Вот как вы бы это использовали:

x = 1:3;
y = [17.5, 97.5, 100];
std = [23.84848004, 10.89724736, 0];

figure
hold on
set(gca, 'FontSize',16)
bar(x, y)
errorbar(y, std, '.')

set(gca, 'ylim',[0,150]);

XTickLabel = {'A', 'B', 'C'};
set(gca, 'xtick',x, 'XTickLabel',XTickLabel);

overbar(1 ,2, 120, 'p=0.037');
overbar(2, 3, 130, 'p<0.0001');
overbar(1, 3, 140, 'p<0.0001');

output plot

...