Как я могу изменить цвет определенного бина на гистограмме?

Я написал код в MATLAB, который строит гистограмму. Мне нужно покрасить одну из корзин в другой цвет, чем другие корзины (скажем, красный). Кто-нибудь знает, как это сделать? Например, учитывая:

A = randn(1,100);
hist(A);

Как бы я сделал корзину, которая 0,7 принадлежит красному цвету?


person ariel    schedule 17.12.2010    source источник


Ответы (2)


Альтернативой созданию двух перекрывающихся гистограмм, таких как Jonas, является один вызов bar, чтобы отобразить интервалы в виде набора исправьте объекты, затем измените 'FaceVertexCData' свойство, чтобы перекрасить грани патча:

A = randn(1,100);                 %# The sample data
[N,binCenters] = hist(A);         %# Bin the data
hBar = bar(binCenters,N,'hist');  %# Plot the histogram
index = abs(binCenters-0.7) < diff(binCenters(1:2))/2;  %# Find the index of the
                                                        %#   bin containing 0.7
colors = [index(:) ...               %# Create a matrix of RGB colors to make
          zeros(numel(index),1) ...  %#   the indexed bin red and the other bins
          0.5.*(~index(:))];         %#   dark blue
set(hBar,'FaceVertexCData',colors);  %# Re-color the bins

И вот результат:

альтернативный текст

person gnovice    schedule 17.12.2010
comment
Я даже не проверял, что ряды столбцов дают вам отдельные ручки, после того как увидел, что гистограмма — это всего лишь один объект. +1 за осторожность. - person Jonas; 18.12.2010

Я думаю, самый простой способ — сначала нарисовать гистограмму, а затем просто нарисовать над ней красную ячейку.

A = randn(1,100);
[n,xout] = hist(A); %# create location, height of bars
figure,bar(xout,n,1); %# draw histogram

dx = xout(2)-xout(1); %# find bin width
idx = abs(xout-0.7) < dx/2; %# find the bin containing 0.7
hold on;bar([xout(idx)-dx,xout(idx),xout(idx)+dx],[0,n(idx),0],1,'r'); %# plot red bar
person Jonas    schedule 17.12.2010
comment
@ariel: Похоже, я ошибся, когда позвонил bar. Теперь это должно работать. - person Jonas; 17.12.2010