三个直方图,三种不同的颜色,一个图形:matlab



我正在尝试绘制图像中不同颜色像素的频率。我可以在三个不同的数字上画三个不同直方图,但我想把它们都画在同一个数字上,红色代表红色,绿色代表绿色等。根据我从这个和其他网站上的答案可以看出,以下应该有效,但不行,只会出现第二个。我做错了什么?

hold on;
x = 0:1:255;
figure ('name', 'red') ;
red = (newImg(:,:,1));
r = red(:)';
r = cast(r,'double');
[graph1,graph2] = hist (r,x);
bar(graph2,graph1, 'FaceColor', 'r','EdgeColor','r')
alpha(0.3);
green = (newImg(:,:,2));
g = green(:)';
g = cast(g,'double');
[graph1,graph2] = hist (g,x);
bar(graph2,graph1, 'FaceColor', 'b','EdgeColor','b')
hold off;

您可以用更简单的方式绘制所有直方图(RGB通道),例如:

hist(reshape(newImg,[],3),x);
colormap([1 0 0 ; 0 1 0; 0 0 1]); %RGB

在这里,我将newImg重塑为一个Nx3矩阵,相当于您创建的[r; g ;b]。然后,单个hist可以处理它们,并使用自定义颜色图,用它所代表的正确颜色绘制每个通道。

以下是关于如何将多个具有透明度的直方图叠加的一些很好的解释,我认为这将对您有所帮助:http://desk.stinkpot.org:8080/tricks/index.php/2006/07/how-在matlab/中制作透明蛋白直方图

figure;
hist(data1,20);
h = findobj(gca,’Type’,'patch’);
set(h,’FaceColor’,'r’,'EdgeColor’,'w’,'facealpha’,0.75);
hold on
hist(data2,20);
h = findobj(gca,’Type’,'patch’);
set(h,’facealpha’,0.75);

固定,"保持"需要在绘制第一个图之后出现;我以为这是一个开关——你切换"保持",它一直保持到你关闭,显然不是。。。

在调用hold on之前,您需要创建一个新图形(和/或轴),因为保持状态适用于每个轴,而命令hold on适用于当前轴。如果要更精确地控制保持状态,请修改轴的NextPlot属性。

此外,要绘制多个直方图,文件交换中的distributionPlot可能很有用;在您的情况下,示例#7。

最新更新