Более эффективный способ построения точек оси X? - PullRequest
1 голос
/ 29 августа 2009

Я работал над проектом, который требует, чтобы гистограмма была заполнена ценовыми результатами. На графике отображается количество товаров в данном ценовом диапазоне. Например, если на amazon есть 9 предметов в ценовом диапазоне от 0 до 10 долларов США, на оси x будет отображаться 0-10 долларов, а на оси y будет указано значение 9.

Моя гистограмма имеет 8 баров, все с одинаковыми ценовыми диапазонами. 0–10 долл. США, 10–20 долл. США, 20–30 долл. США ... и т. Д.

У меня такой вопрос: Как лучше всего определить эти отдельные точки? Нет единого ценового диапазона между этими элементами, поэтому ось не может быть статическими числами. Они должны быть рассчитаны динамически в диапазоне результатов.

Таким образом, в настоящее время Я создаю точки оси X следующим образом:

Я беру самый низкий результат: @numbers[0] = results[0];

И я беру самый высокий результат: @numbers[8] = results[-1];

Тогда я нахожу медиану двух: @numbers [4] = (@numbers [0] + @ numbers [8]) / 2;

Затем я повторяю процесс еще 6 раз

@ numbers [2] = (@numbers [0] + @ numbers [4]) / 2; @numbers [6] = (@numbers [4] + @ numbers [8]) / 2; @numbers [1] = (@numbers [0] + @ numbers [2]) / 2; @numbers [3] = (@numbers [2] + @ numbers [4]) / 2; @numbers [5] = (@numbers [4] + @ numbers [6]) / 2; @numbers [7] = (@numbers [6] + @ numbers [8]) / 2;

Это дает мне результаты, которые мне нужны, но кажется ужасно повторяющимся, и я думаю, что есть лучший способ.

Я попытался создать цикл, но не смог написать его менее подробным образом.

Есть ли более быстрый способ сделать это или, может быть, что-то более похожее на DRY?

1 Ответ

0 голосов
/ 29 августа 2009

Ваши бункеры всегда одинакового размера? В вашем примере весь диапазон доли = 10. Если это так, то вы можете сделать:

binspacing = overall range / (numberofbins-1);

, а позиция bin n будет позицией по оси x чисел [0] плюс n, умноженное на интервал.

...