представить гистограммы в разных цветах - Matlab - PullRequest
3 голосов
/ 16 декабря 2010

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

close all  
b=-10:1:10;
x=randn(10^5,1);  
x=(x+5)*3;  
y=randn(1,10^5);  
y=(y+2)*3;  
hist(x,100)  
hold on   
hist(y,100);  

h = findobj(gca,'Type','patch');   
set(h,'FaceColor','r','EdgeColor','w')  
%the last two lines changes the color of both hists.

Ответы [ 3 ]

7 голосов
/ 16 декабря 2010

h в вашем коде содержит дескриптор двух объектов патча.Попробуйте назначить цвет каждому по отдельности:

%# ...
h = findobj(gca, 'Type','patch');
set(h(1), 'FaceColor','r', 'EdgeColor','w')
set(h(2), 'FaceColor','b', 'EdgeColor','w')
3 голосов
/ 16 декабря 2010

Один из вариантов - вызвать hist для обоих векторов:

hist([x(:) y(:)], 100);

Другой вариант - присвоить ответ выходному аргументу:

[hx, binx] = hist(x, 100);
[hy, biny] = hist(y, 100);

и отобразить ихлюбимый стиль / цвет.

1 голос
/ 16 декабря 2010

В стандартной библиотеке MATLAB hist использует команду bar для построения графиков, но само использование bar дает вам гораздо большую гибкость.Переходя к bar матрице , столбцы которой являются столбцами бинов каждой гистограммы, отображает каждую из этих гистограмм в другом цвете, что является именно тем, что вам нужно.Вот пример кода:

[xcounts,~] = hist(x,100);
[ycounts,~] = hist(y,100);
histmat = [reshape(xcounts,100,1) reshape(ycounts,100,1)];
bar(histmat, optionalWidthOfEachBarInPixelsForOverlap);

Документация для bar здесь здесь .

...