Старые Функции Гистограммы (тсс, histc)
Более ранние версии MATLAB® используют hist
и функции histc
как первичный способ создать гистограммы и вычислить количества интервала гистограммы. Эти функции, в то время как хороший для некоторых общих целей, ограничили полные возможности. Использованию hist
и histc
в новом коде препятствуют по этим причинам (среди других):
После использования hist
, чтобы создать гистограмму, изменение свойств гистограммы является трудным и требует перевычисления целой гистограммы.
Поведение по умолчанию hist
должно использовать 10 интервалов, который не подходит для многих наборов данных.
Графическое изображение нормализованной гистограммы требует ручных вычислений.
hist
и histc
не имеют сопоставимого поведения.
histogram
, histcounts
и функции discretize
существенно совершенствуют возможности создания гистограммы и вычисления в MATLAB при тихом продвижении непротиворечивости и простоты использования. histogram
, histcounts
и discretize
являются рекомендуемыми функциями создания и вычисления гистограммы для нового кода.
Особо значимый следующие изменения, которые стоят как улучшения по сравнению с hist
и histc
:
histogram
может возвратить объект гистограммы. Можно использовать объект изменить свойства гистограммы.
И histogram
и histcounts
имеют автоматическое раскладывание и возможности нормализации с несколькими общими встроенными опциями.
histcounts
является первичной функцией вычисления для histogram
. Результат состоит в том, что функции имеют сопоставимое поведение.
discretize
предоставляет дополнительные возможности и гибкость для определения размещения интервала каждого элемента.
Несмотря на вышеупомянутые улучшения, существует несколько важных различий между старым и теперь рекомендуемыми функциями, которые могут потребовать обновления вашего кода. Таблицы суммируют различия между функциями и обеспечивают предложения для обновления кода.
Обновления кода для hist
Различие | Старое поведение с hist | Новое поведение с histogram |
---|---|---|
Введите матрицы |
A = randn(100,2); hist(A) |
A = randn(100,2); h1 = histogram(A(:,1),10) edges = h1.BinEdges; hold on h2 = histogram(A(:,2),edges) Вышеупомянутый пример кода использует те же края интервала для каждой гистограммы, но в некоторых случаях лучше установить |
Спецификация интервала |
|
Чтобы преобразовать центры интервала в края интервала для использования с ПримечаниеВ случаях, где центры интервала, используемые с histogram(A,'BinLimits',[-3,3],'BinMethod','integers') |
Выходные аргументы |
A = randn(100,1); [N, Centers] = hist(A) |
A = randn(100,1); h = histogram(A); N = h.Values Edges = h.BinEdges ПримечаниеЧтобы вычислить количества интервала (не строя график гистограммы), замените |
Количество по умолчанию интервалов |
| И A = randn(100,1); histogram(A) histcounts(A) |
'BinLimits' |
| Если Чтобы воспроизвести результаты A = randi(5,100,1); histogram(A,10,'BinLimits',[min(A) max(A)]) |
Обновления кода для histc
Различие | Старое поведение с histc | Новое поведение с histcounts |
---|---|---|
Введите матрицы |
A = randn(100,10); edges = -4:4; N = histc(A,edges) |
A = randn(100,10); edges = -4:4; N = histcounts(A,edges) Используйте цикл for, чтобы вычислить количества интервала по каждому столбцу. A = randn(100,10); nbins = 10; N = zeros(nbins, size(A,2)); for k = 1:size(A,2) N(:,k) = histcounts(A(:,k),nbins); end Если производительность является проблемой из-за большого количества столбцов в матрице, то рассмотрите продолжение использовать |
Значения включены в последний интервал |
|
A = 1:4; edges = [1 2 2.5 3] N = histcounts(A) N = histcounts(A,edges) Последний интервал от N = histcounts(A,'BinMethod','integers'); |
Выходные аргументы |
A = randn(15,1); edges = -4:4; [N,Bin] = histc(A,edges) |
|
Функция hist
принимает центры интервала, тогда как функция histogram
принимает края интервала. Чтобы обновить код, чтобы использовать histogram
, вы можете должны быть преобразовать центры интервала в края интервала, чтобы воспроизвести результаты, достигнутые с hist
.
Например, задайте центры интервала использования с hist
. Эти интервалы имеют универсальную ширину.
A = [-9 -6 -5 -2 0 1 3 3 4 7]; centers = [-7.5 -2.5 2.5 7.5]; hist(A,centers)
Чтобы преобразовать центры интервала в края интервала, вычислите среднюю точку между последовательными значениями в centers
. Этот метод воспроизводит результаты hist
и для универсальных и для неоднородных ширин интервала.
d = diff(centers)/2; edges = [centers(1)-d(1), centers(1:end-1)+d, centers(end)+d(end)];
Функция hist
включает значения, падающие на правый край каждого интервала (первый интервал включает оба края), тогда как histogram
включает значения, которые падают на левый край каждого интервала (и последний интервал включает оба края). Переключите края интервала немного, чтобы получить те же количества интервала как hist
.
edges(2:end) = edges(2:end)+eps(edges(2:end))
edges = 1×5
-10.0000 -5.0000 0.0000 5.0000 10.0000
Теперь, используйте histogram
с краями интервала.
histogram(A,edges)