import powerlaw
def power_law_graphing(dictionary,raw,name):
x = []
y = []
keys = list(dictionary.keys())
keys.sort()
print(keys)
total = len(raw)
mmin = float('inf')
mmax = -mmin
for k in keys:
x.append(k)
y.append(dictionary[k]/total)
if dictionary[k] > mmax:
mmax = dictionary[k]
if dictionary[k] < mmin:
mmin = dictionary[k]
x = np.array(x)
y = np.array(y)
plt.xscale("log")
plt.yscale("log")
plt.xlabel("node degree (k)")
plt.ylabel("Proportion of nodes with degree (k)")
plt.scatter(x,y)
raw = np.array(raw)
fit = powerlaw.Fit(np.array(raw),xmin=1,discrete=False)
fit.power_law.plot_pdf(color = 'b',linestyle='--',linewidth=3)
fit.plot_pdf(color='b')
gammaFunctionX = []
gammaFunctionY = []
alpha = fit.power_law.alpha
c = (alpha - 1)*mmin**(alpha-1)
print('alpha= ', fit.power_law.alpha,' sigma= ',fit.power_law.sigma, ' c= ',c)
for i in range(0,keys[-1]):
gammaFunctionX.append(i)
gammaFunctionY.append(c/(i**alpha))
gammaFunctionX = np.array(gammaFunctionX)
gammaFunctionY = np.array(gammaFunctionY)
plt.plot(gammaFunctionX, gammaFunctionY, color = 'r')
plt.title("Power Law Distribution function of "+name)
plt.savefig("pdf-"+name+".png")
plt.show()