У меня есть данные формы:

x1 y1
x2 y2
...

где каждый cuople x, y представляет точку в 2D-плоскости.

Мне нужна гистограмма разброса точек в направлении y (например, bin всех точек с одинаковым значением y). Это будет проекция на ось Y, которая затем превращается в гистограмму.

Как бы я пошел по этому поводу, используя gnuplot?

1 ответ1

2

Не существует простого способа создания фактической гистограммы, поскольку это не просто задача построения графика, но требует, чтобы данные были сначала отсортированы и объединены. Вы можете сделать это вне gnuplot и отобразить результат из gnuplot просто с помощью plot 'file' with histo .

Тем не менее, есть два основных способа сделать то, что вы хотите полностью в gnuplot.

Во-первых, это старый трюк, который заставляет gnuplot собирать и сортировать данные, используя небольшую математику и плавный стиль smooth freq . Если ваш файл данных называется "data", вы можете сделать:

w = 5
bin(x,wth) = width*floor(x/wth)
plot 'data' using (bin($2,bw)):(1.0) smooth freq with boxes

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

Последние (> = 4.4) выпуски gnuplot могут вычислить оценку плотности ядра, которая похожа на независимую от бина гистограмму: она дает вам непрерывное распределение. Кроме того, он выполняет сортировку и сортировку для вас! Вам просто нужно сказать

plot 'data' using 2:(.001) smooth kden

.001 выше даст вам нормализованное распределение, если у вас есть 1000 точек данных. Вы захотите заменить обратное количество имеющихся у вас точек данных (или не беспокойтесь, если вам все равно, нормализуется ли ваш результат).

Я рекомендую последний способ, если у вас установлена последняя версия gnuplot. Еще немного об этом в моей книге о gnuplot, которая только что вышла.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .