Построение "идеального" дистрибутива Zipf из данных на gnuplot

Моя цель - создать простой файл.dat и построить из него как фактические данные, так и теоретические точки идеального распределения Zipf, то есть распределения, где каждый элемент имеет значение, равное 1/(rank).

Например, мои данные для большинства подписок в Instagram:

# List of most followed users on instagram
# By rank and millions of followers
# From Wikipedia
# https://en.wikipedia.org/wiki/List_of_most_followed_users_on_Instagram
# rank, millions of followers

1 222
2 120
3 105
4 101
5 101
6 100
7 99 
8 93 
9 86 
10 85
11 80
12 79
13 76
14 73
15 71
16 69
17 67
18 65
19 63
20 63

Из другого потока я узнал, что я могу просто добавить новый столбец с идеальными значениями распределения Zipf на ранг (в данном случае 222, 111, 74, 55,5 и т. Д.), А затем запустить второй график как ,'' using 1:3 но это требует ручного выполнения вычисления и добавления его в исходный файл, и это шаг, который я пытаюсь избежать. Это возможно? Как я могу распространить его на другие распределения / вычисления данных?

1 ответ

Решение

Использование stats рассчитать максимальное значение второго столбца с

stats 'file.dat' u 2 nooutput
max = STATS_max

Затем вы рассчитываете распределение Zipf с (max/$1)

plot 'file.dat' u 1:2 pt 7 t 'data',\
     '' u 1:(max/$1) w l t 'ideal Zipf'
Другие вопросы по тегам