Conditional coloring of histogram graph in MATLAB

笑着哭i 提交于 2020-01-06 01:29:25

问题


I have a histogram that I want conditional coloring in it with this rule :

Values that are upper than 50 have red bars and values lower than 50 have blue bars.

Suppose that we have this input matrix:

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

I want default bins of MATLAB and applying this coloring on X-axes (bins). I'm using GUIDE to design my GUI and this histogram is an axes in my GUI.

This is our normal graph. Bars with upper values than 50 should be red and bars with lower values than 50 should be green (X-axes). Bars with upper values than 50 should be red and ?


回答1:


I think this does what you want (as per comments). The bar around 50 is split into the two colors. This is done by using a patch to change the color of part of that bar.

%// 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




回答2:


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

then you create an histogram, but you are only going to use this to get the numbers of bins, the numbers of elements and positions:

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

and finally here is the code where you use the Number of elements (N) and the position (XX) of the previous hist and color them

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

here you can consider using more than one if and then you can set multiple colors

cheers




回答3:


First sort X:

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

sorted_X :

sorted_X =

Columns 1 through 14

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

Columns 15 through 18

90    95    96   100

Then split the data based on 50:

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

Display it as two different histograms.

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’);


来源:https://stackoverflow.com/questions/25219816/conditional-coloring-of-histogram-graph-in-matlab

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!