как вывести набор данных при использовании гистограммы в Mathematica - PullRequest
2 голосов
/ 09 марта 2011

В Mma функция гистограммы генерирует только графику. Мне интересно, как я могу получить набор данных; есть ли удобная встроенная функция для этого?

Большое спасибо.

Ответы [ 3 ]

12 голосов
/ 09 марта 2011

HistogramList был добавлен в Mathematica V8 для демонстрации расчетов биннинга и высоты.

HistogramList[a]

enter image description here

Для V7 вы можете взломать третий аргумент, чтобы получить бины и счетчики.

Histogram[a, Automatic, (Print[{##}]; #2) &]

enter image description here

3 голосов
/ 09 марта 2011

Возможно, небольшой поиск в интернете тоже поможет. Это был мой ответ (от 18 июня 2010 г.) на аналогичный вопрос в группе новостей Mathematica comp.soft-sys.math.mathematica:

data = RandomReal[NormalDistribution[0, 1], 200];
res = Reap[Histogram[data, Automatic, (Sow[{#1, #2}]; #2) &]]

enter image description here

Мне кажется, что это решение немного лучше, чем у Бретта, потому что оно возвращает данные в удобном для использования формате.

EDIT
Чтобы воссоздать гистограмму после любых манипуляций с бином или счетчиком, вы должны выполнить действия, предложенные Бреттом ниже. Просто подготовьте корзину и рассчитайте ее следующим образом:

bins = Union[ Flatten[res[[2, 1, 1, 1]]]];
counts = res[[2, 1, 1, 2]];
Histogram[data, {bins}, counts &]

Я не уверен, что бункеры гарантированно будут в порядке возрастания, поэтому вместо Union (какие-то сортировки) вы можете использовать DeleteDuplicates.

count & это трюк здесь. Как объяснено на странице справки, ожидается, что функция в третьей позиции займет список бинов и счетчиков и вернет список высот. В этом случае он просто поглощает списки и возвращает счет.

2 голосов
/ 21 сентября 2011

Если вы используете V7, и вы расстроены тем, что с помощью этого трюка вы не можете использовать встроенную спецификацию высоты бина («Счет», «Вероятность», «Вероятность, плотность» и т. Д.), Вы можете изменитьОтвет Сьорда, приведенный выше, возвращает нормализованные корзины, как вы хотите.Например, если вы хотите, чтобы высота бина была равна

data = RandomReal[NormalDistribution[0, 1], 200];
Histogram[data, Automatic, "Probability"]

, вы могли бы вместо этого использовать

res = Reap[Histogram[data, Automatic, 
           (ret = #2/Length[data]; 
            Sow[{#1, ret}]; ret) &
      ]]

Аналогом "ProbabilityDensity" является

res = Reap[Histogram[data, Automatic, 
           (binWidth = #1[[1]][[2]] - #1[[1]][[1]];
           ret = #2/(Length[data]*binWidth);
           Sow[{#1, ret}]; ret) &
     ]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...