Гистограмма с логарифмическими бинами и нормализованным Matlab - PullRequest
0 голосов
/ 06 июня 2019

Я хочу составить гистограмму для каждого столбца матрицы, но я хочу, чтобы ячейки были логарифмическими и также нормализовались, также после того, как я сделаю гистограмму, я хочу подгонять ее без отображения столбцов.Вот что я попробовал:

y=histogram(x,'Normalized','probability');

, что дает мне нормализованную гистограмму, но я не знаю, как сделать логарифмические ячейки.

Ответы [ 2 ]

2 голосов
/ 06 июня 2019

Я думаю, что правильный синтаксис будет Normalization. Чтобы сделать его логарифмическим, вы должны изменить объект оси. Например:

ha = axes;
y = histogram( x,'Normalization','probability' );
ha.YScale = 'log';
1 голос
/ 06 июня 2019

Существует два разных способа создания логарифмической гистограммы:

  1. Вычислить гистограмму логарифма данных.Вероятно, это самый хороший подход, поскольку вы позволяете программному обеспечению решать, сколько ячеек создавать и т. Д. Ось X теперь не соответствует вашим данным, она соответствует журналу ваших данных.Для подгонки функции это, вероятно, полезно, но для отображения это может сбить с толку.Здесь я изменяю метки меток, чтобы они отображали фактическое значение, оставляя метки сами по себе в исходных значениях:

    y = histogram(log(x),'Normalization','probability');
    h = gca;
    h.XTickLabels = exp(h.XTick);
    
  2. Определите свои собственные края корзины в логарифмическом масштабе.Здесь вам нужно определить, сколько лотков вам нужно, в зависимости от количества выборок и распределения выборок.

    b = 2.^(1:0.25:3);
    y = histogram(x,b,'Normalization','probability');
    set(gca,'XTick',b) % This just puts the tick marks in between bars so you can see what we did.
    

Метод 1 позволяет MATLAB определять количество лотков иребра автоматически в зависимости от входных данных.Следовательно, он не подходит для создания нескольких совпадающих гистограмм.Для этого случая используйте метод 2. В ребрах можно получить более просто следующим образом:

N = 10;         % number of bins
start = min(x); % first bin edge
stop = max(x);  % last bin edge
b = 2.^linspace(log2(start),log2(stop),N+1);
...