3

我正在尝试呈现两个直方图,并且我希望它们中的每一个都具有不同的颜色。让我们说一红一蓝。到目前为止,我设法改变了它们的颜色,但只改变了相同的颜色。
这是代码

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.
4

3 回答 3

7

代码中的h包含两个补丁对象的句柄。尝试分别为每个分配颜色:

%# ...
h = findobj(gca, 'Type','patch');
set(h(1), 'FaceColor','r', 'EdgeColor','w')
set(h(2), 'FaceColor','b', 'EdgeColor','w')
于 2010-12-16T16:43:31.953 回答
3

一种选择是调用hist两个向量:

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

另一种选择是将答案分配给输出参数:

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

并以您最喜欢的样式/颜色绘制它们。

于 2010-12-16T12:40:16.417 回答
1

在 MATLAB 标准库中,hist使用该命令bar进行绘图,但单独使用bar可以为您提供更多的灵活性。传入bar一个矩阵,其列是每个直方图的 bin 计数,以不同的颜色绘制每个直方图,这正是您想要的。这是一些示例代码:

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

文档bar这里

于 2010-12-16T18:24:40.873 回答