2013-09-02 2 views
1

Я хочу отображать значения измерений в виде гистограммы. Пользователь может выбирать между различными измерениями, которые очень различны по своей природе. Например, сложность метода обычно дает значения от 1 до 20. Напротив, дата последнего изменения исходного файла дает временные метки unix, которые являются очень большими числами.Масштабирование бесконечных диапазонов значений до конечного интервала

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

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

Существуют ли какие-либо общие подходы к этой проблеме, которые, с одной стороны, обеспечивают отличительность, а с другой стороны, избегают ошибочных визуализаций? Любые алгоритмы, которые хорошо соответствуют произвольным рядам значений в заданный интервал?

ответ

1

Позвольте {x_i} быть вашим набором значений, а затем min = min{x_i}, max = max{x_i}.

Теперь можно нормализовать все значения на множестве в интервале [0,1] с:

x_i = (x_i - min)/(max - min) 

Как вы можете легко увидеть, максимальный элемент будет равен 1, то мин будет 0, и значения itnermediate будут сохранять свою долю. Вы можете масштабировать это немного, добавляя константу, если вы не выровняете значение 0 в гистограмме, тогда мин будет alpha и максимальным 1 + alpha.

В общем, вы можете отобразить каждый набор в интервале [a,b] делать:

x_i = a + (x_i - min) * (b - a)/(max - min) 
+0

Этот метод действительно не работает для бесконечного диапазона, как предполагает название вопроса. Либо ОП не понимает его собственных требований, либо заголовок формулируется плохо. – ffledgling

2

Один подход, который я использовал в прошлом, чтобы взять exp(lbound(log(min(data)))) и exp(ubound(log(max(data)))) как мой диапазон, назначая журнала базы подходит мой эстетичным.

Смежные вопросы