我尝试使用 poweRlaw 包来绘制一些幂律拟合。它似乎适用于单个曲线。但我无法在同一张图上绘制多个图。
Ref: 这个包里有办法吗?
[附言我是新手]
set.seed(1)
x1 <- ceiling(rlnorm(1000, 4))
x2 <- ceiling(rlnorm(1000, 2))
library(poweRlaw)
pl_d = pl_data$new(x1)
plot(pl_d)
#Now fit the powerlaw
m = displ$new(pl_d)
#Estimate the cut-off
#estimate_xmin(m)
aaa <- estimate_xmin(m)
aaa <- as.data.frame(aaa)
aaa <- aaa[2,1]
x_min <- min(table(x))
m$setXmin(aaa); m$mle()
#Plot the data and the PL line
#plot(m)
lines(m, col=2)
# next POWER LAW graph
#Plot the data
pl_d = pl_data$new(x2)
points(pl_d)
#Now fit the powerlaw
m = displ$new(pl_d)
#Estimate the cut-off
#estimate_xmin(m)
aaa <- estimate_xmin(m)
aaa <- as.data.frame(aaa)
aaa <- aaa[2,1]
x_min <- min(table(x))
m$setXmin(aaa); m$mle()
#Plot the data and the PL line
#points(m)
lines(m, col=3)
最佳答案
您可以使用 lines
命令添加多个最佳拟合幂律。因此,使用您的数据:
set.seed(1)
x1 = ceiling(rlnorm(1000, 4))
我们加载包并创建一个离散幂律对象:
m = displ$new(x1)
然后绘制数据
plot(m)
接下来,我们为每个幂律设置
xmin
和 alpha
并使用 lines
将其添加到图中:m$setXmin(100)
p_100 = estimate_pars(m)
m$setPars(p_100)
lines(m, col=2, lwd=2)
##Line 2
m$setXmin(202)
p_200 = estimate_pars(m)
m$setPars(p_200)
lines(m, col=3, lwd=2)
如果你想在同一张图上有多个数据集,最简单的方法是绘制一个数据集,但将数据保存为一个数据框。例如,生成一些数据集:
set.seed(1)
x1 = ceiling(rlnorm(1000, 4))
x2 = ceiling(rlnorm(1000, 5))
拟合幂律
m1 = displ$new(x1)
m1$setXmin(estimate_xmin(m1))
m2 = displ$new(x2)
m2$setXmin(estimate_xmin(m2))
绘制数据集 2,但将数据保存为
pts2
pts2 = plot(m2)
像往常一样绘制和添加线条:
plot(m1)
points(pts2$x, pts2$y, col=3)
lines(m1, col=2)
lines(m2, col=4)
要得到:
关于r - 带有包 poweRlaw 的多个幂律图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15050406/