【问题标题】:Conditional coloring of histogram graph in MATLABMATLAB中直方图的条件着色
【发布时间】:2014-08-09 14:57:46
【问题描述】:

我有一个直方图,我想用这条规则在其中进行条件着色:

高于50 的值具有red 条,低于50 的值具有blue 条。

假设我们有这个输入矩阵:

X = [32 64 32 12 56 76 65 44 89 87 78 56 96 90 86 95 100 65];

我想要 MATLAB 的默认 bin 并在 X 轴(bin)上应用这种着色。我正在使用 GUIDE 来设计我的 GUI,这个直方图是我的 GUI 中的一个轴。

这是我们的正常图。高于 50 的条应为红色,低于 50 的条应为绿色(X 轴)。值大于 50 的条形应为红色且 ?

【问题讨论】:

  • X 是直方图还是计算直方图的输入?
  • X为直方图输入数据。
  • 而基于 50 的除法适用于 x 轴(bins)还是 y 轴(count)?
  • 您希望如何定义直方图箱?也就是说,有多少个箱子,在哪个位置?也许编辑您的问题以显示您当前的直方图代码
  • 谢谢。问题已编辑。

标签: matlab graph histogram matlab-guide


【解决方案1】:

我认为这可以满足您的需求(根据 cmets)。 50左右的条被分成两种颜色。这是通过使用补丁来更改该栏的一部分的颜色来完成的。

%// Data:
X = [32 64 32 12 56 76 65 44 89 87 78 56 96 90 86 95 100 65]; %// data values
D = 50; %// where to divide into two colors

%// Histogram plot:
[y n] = hist(X); %// y: values; n: bin centers
ind = n>50; %// bin centers: greater or smaller than D?
bar(n(ind), y(ind), 1, 'r'); %// for greater: use red
hold on %// keep graph, Or use hold(your_axis_handle, 'on')
bar(n(~ind), y(~ind), 1, 'b'); %// for smaller: use blue
[~, nd] = min(abs(n-D)); %// locate bar around D: it needs the two colors
patch([(n(nd-1)+n(nd))/2 D D (n(nd-1)+n(nd))/2], [0 0 y(nd) y(nd)], 'b');
%// take care of that bar with a suitable patch

【讨论】:

  • 你对50岁附近的酒吧有什么想法?这个特定条的一部分高于 50,一部分低于 50。我怎样才能在那个条中有不同的颜色?
  • @user2991243 我正在考虑使用条形 center 来确定颜色。这就是我从您的cmets中了解到的。所以如果中心大于50,我用红色
  • 感谢您的准确回答。我们可以在这个特定的栏中使用不同的颜色吗?此条的某些部分必须为蓝色,而其他部分(较大的部分)必须为红色。
  • 我们可以删除条之间的空格吗?
  • @user2991243 “某个部分”是什么意思?比如,垂直划分条形?这很棘手。要删除空格:将1 作为第三个参数添加到barbar(n(~ind), y(~ind), 1, 'b');
【解决方案2】:
X = [32 64 32 12 56 76 65 44 89 87 78 56 96 90 86 95 100 65];

然后您创建一个直方图,但您只会使用它来获取 bin 的数量、元素的数量和位置:

[N,XX]=hist(X);
close all

最后是代码,您可以在其中使用元素数 (N) 和前一个组织的位置 (XX) 并为它们着色

figure;
hold on;
width=8;
for i=1:length(N)
    h = bar(XX(i), N(i),8);
    if  XX(i)>50
        col = 'r';
    else
        col = 'b';
    end
    set(h, 'FaceColor', col)
end

这里你可以考虑使用多个 if 然后你可以设置多种颜色

干杯

【讨论】:

    【解决方案3】:

    第一个排序 X:

    X = [32 64 32 12 56 76 65 44 89 87 78 56 96 90 86 95 100 65]; 
    sorted_X = sort(X)
    

    排序_X:

    排序_X =

    第 1 至 14 列

    12    32    32    44    56    56    64    65    65    76    78    86    87    89
    

    第 15 到 18 列

    90    95    96   100
    

    然后根据50拆分数据:

    idx1 = find(sorted_X<=50,1,'last');
    A = sorted_X(1:idx1);
    B = sorted_X(idx1+1:end);
    

    将其显示为两个不同的直方图。

    hist(A);
    hold on;
    hist(B); 
    h = findobj(gca,’Type’,’patch’);
    display(h) 
    set(h(1),’FaceColor’,’g’,’EdgeColor’,’k’);
    set(h(2),’FaceColor’,’r’,’EdgeColor’,’k’);
    

    【讨论】:

    • 感谢您的回答。 gca 指的是哪里?我的 GUI 中的轴?
    猜你喜欢
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多