【问题标题】:Three histograms, three different colours, one figure: matlab三个直方图,三种不同颜色,一张图:matlab
【发布时间】:2013-02-14 16:53:31
【问题描述】:

我正在尝试绘制图像中不同颜色像素的频率。我可以在三个单独的数字上绘制三个单独的直方图,但我想将它们全部绘制在同一个数字上,红色代表红色,绿色代表绿色等。从我在这个和其他网站上的答案中可以看出,以下应该工作,但它没有,只有第二个出现。我究竟做错了什么?

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;

【问题讨论】:

    标签: matlab histogram


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      这里有一些关于如何叠加多个透明直方图的很好的解释,我认为它会对你有所帮助: http://desk.stinkpot.org:8080/tricks/index.php/2006/07/how-to-make-a-transparent-histogram-in-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);
      

      【讨论】:

        【解决方案3】:

        已修复,在绘制第一张图后需要“等待”;我以为它是一个切换开关——你打开“按住”,它会一直按住直到你把它关掉,显然不是……

        【讨论】:

          【解决方案4】:

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

          此外,要绘制多个直方图,来自 File Exchange 的distributionPlot 可能很有用;在您的情况下,例如 #7。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-06-21
            • 2020-01-24
            • 2016-12-21
            • 2013-10-17
            • 2011-05-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多