/ / Plotando uma distribuição Zipf "perfeita" a partir de dados no gnuplot - gnuplot, zipf

Plotando uma distribuição Zipf “perfeita” a partir de dados no gnuplot - gnuplot, zipf

Meu objetivo é ter um simples.arquivo dat e, a partir dele, plotar os dados reais e os pontos teóricos de uma distribuição Zipf perfeita, isto é, uma distribuição onde cada item tem um valor igual a 1 / (rank).

Por exemplo, meus dados para a maioria das contas do Instagram seguidas são:

# 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

De outro tópico aprendi que posso acrescentar uma nova coluna com os valores ideais de distribuição Zipf por classificação (neste caso, 222, 111, 74, 55.5 etc) e depois executar o segundo gráfico como ,"" using 1:3 mas isso requer manualmente fazendo o cálculo e anexando-o ao arquivo original e isso é o passo que estou tentando evitar. Isso é possível? Como eu poderia estendê-lo para outras distribuições / cálculos de dados?

Respostas:

0 para resposta № 1

Usar stats para calcular o valor máximo da segunda coluna com

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

Então você calcula a distribuição Zipf com (max/$1)

plot "file.dat" u 1:2 pt 7 t "data",
"" u 1:(max/$1) w l t "ideal Zipf"