Построение "идеального" дистрибутива 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'