的Env
R 3.3.2 OSX 10.9.3
我试图使用table
从度矢量获得图形的度分布,然后在转换为数据帧后绘制为loglog图形。下面的代码显示了更多细节:
度数信息存储在向量Ent $ connums中。我使用as.data.frame(table())
获得频率。而且我确实获得了所需的所有数据。
print(Ent$connums)
odf <- as.data.frame(table(Ent$connums))
names(odf) <- c('allk', 'freq')
#print(odf)
d.f <- data.frame(k=odf$allk, pk=odf$freq/nums)
rm(Ent)
rm(odf)
print(d.f$k)
print(d.f$pk)
pdf(file="ba-r-dist.pdf")
opar <- par(no.readonly=TRUE)
par(mfrow=c(1,1))
#####################
plot(
d.f$k,
d.f$pk,
type = "n",
log = "xy",
main = "Degree distribution",
sub= paste("m0 = ", bquote(.(m0)), ", m = ", bquote(.(m)), ", N = t = ", bquote(.(t0))),
xlab = "k",
ylab = "p(k)",
xlim = c( 10^0, 10^3),
ylim = c( 0.00001, 1),
xaxt="n", yaxt="n",
xaxs="i", yaxs="i",
)
lines( d.f$k, d.f$pk, col = "green4", lty = "solid")
points( d.f$k, d.f$pk, bg = "red", col="green4", pch = 21 )
legend("topright", inset=.05, c("p(k)"), lty="solid", pch=21, col=c("black"), pt.bg="red")
axis(side = 1, at = 10^(0:3), labels = expression(10^0, 10^1, 10^2, 10^3))
axis(side = 2, at = 10^(-5:0), labels = expression(10^-5, 10^-4, 10^-3, 10^-2, 10^-1, 10^0))
abline(h=outer((1:10),(10^(-5:-1))), col="#00000033", lty=2)
abline(v=outer((1:10),(10^(0:3))), col="#00000033", lty=2)
问题
d.f是一个数据帧。 d.f $ k存储学位信息。 d.f $ pk存储学位频率信息。该图应绘制d.f $ k和d.f $ pk。对于上图,请参见下面的d.f $ k数据,d.f $ k中有41个数字。该图似乎使用1到41而不是d.f $ k中的数据。在图中,k从10 ^ 0开始并且在40旁边结束。似乎点的x值使用1到41,这是d.f $ k的数据索引,并且索引没有存储在d.f. d.f $ k中数据的最小值为4,最大值为102,因此第一个点应为4,最后一个点应为10 ^ 2。
每个点都有黑条。我已经尝试过发现那些黑条与传说无关,虽然它看起来像传说。
如果我将d.f存储到文件并使用read.table
读取它并将其转换为data.frame然后绘制data.frame,则图正确显示。但是这里发生了什么,我错过了什么?
Ent $ connums中的数据存储
[1] 95 79 102 88 102 79 58 83 63 47 21 40 44 23 15 13 29 21
[19] 38 44 25 45 24 18 16 37 24 32 29 8 21 26 44 24 23 7
[37] 23 27 11 21 21 15 27 8 27 26 34 22 13 16 15 26 12 9
[55] 19 16 21 7 16 26 18 15 14 10 20 24 7 18 17 7 27 21
[73] 24 8 13 25 6 15 15 13 17 39 29 9 18 13 8 22 14 8
[91] 9 29 8 10 7 7 17 10 7 6 14 12 9 13 14 7 5 14
[109] 9 13 13 7 12 14 7 13 8 7 16 6 13 8 11 16 11 8
[127] 5 9 14 4 12 10 16 13 10 8 11 10 8 10 10 16 10 12
[145] 11 16 19 8 6 7 7 5 11 15 7 5 12 6 5 6 12 10
[163] 5 9 11 7 7 12 11 10 13 8 10 7 8 10 4 6 13 11
[181] 7 13 8 6 10 4 10 11 5 11 7 21 15 14 9 7 14 15
[199] 6 8 12 11 11 11 6 13 6 7 7 9 6 9 12 9 7 13
[217] 10 9 4 12 11 5 7 12 5 7 6 9 8 11 7 8 9 12
[235] 6 10 8 9 13 8 6 8 7 4 9 4 9 5 14 6 12 9
[253] 5 5 6 5 4 12 7 5 7 7 9 11 4 8 8 6 7 5
[271] 6 7 7 8 11 9 8 8 8 9 6 10 11 4 6 14 5 14
[289] 4 11 10 15 5 9 6 12 6 7 5 8 5 5 9 7 7 7
[307] 11 8 5 6 7 7 6 7 4 8 6 7 9 5 5 7 9 5
[325] 14 9 7 11 4 7 8 6 4 5 7 4 10 9 5 9 6 10
[343] 7 8 10 7 7 11 4 10 13 10 6 5 5 5 9 6 4 5
[361] 4 7 7 8 10 8 6 4 7 9 5 8 6 6 4 7 6 10
[379] 6 6 4 6 11 5 6 7 6 6 8 7 5 6 8 6 5 4
[397] 5 4 5 7 6 4 6 4 6 4 9 5 7 7 4 6 6 5
[415] 8 5 6 5 5 6 7 10 4 5 8 7 7 6 8 5 5 5
[433] 5 5 4 7 7 10 9 4 6 4 7 5 7 5 6 4 8 7
[451] 9 5 5 5 10 4 5 8 9 6 5 4 7 8 6 4 6 5
[469] 5 4 4 4 5 5 4 6 6 12 4 5 5 6 6 4 6 7
[487] 6 5 5 4 5 6 8 6 7 5 4 7 7 5 6 4 5 5
[505] 7 6 7 4 9 5 6 5 6 4 6 4 4 4 6 6 7 4
[523] 7 5 6 4 5 10 6 4 4 4 4 4 5 8 8 6 8 4
[541] 4 4 6 4 4 5 7 5 4 4 4 6 6 5 4 5 8 6
[559] 5 8 5 5 5 5 4 5 4 7 6 9 4 6 5 5 4 6
[577] 5 6 7 7 5 5 5 4 5 5 6 6 7 4 5 6 6 4
[595] 7 7 6 5 5 4 5 7 4 4 5 6 4 4 4 5 6 6
[613] 4 6 5 9 4 7 4 6 7 6 5 5 6 6 5 4 5 4
[631] 6 5 5 6 4 4 5 5 5 4 5 5 4 5 5 7 5 5
[649] 7 6 4 5 4 4 4 4 5 5 4 6 5 4 4 5 4 5
[667] 4 4 5 4 5 5 5 6 4 8 4 5 4 4 6 5 4 5
[685] 6 8 5 5 4 6 7 4 5 8 7 4 4 4 5 5 4 4
[703] 6 5 5 5 5 5 5 4 4 4 4 5 4 5 6 4 4 4
[721] 5 4 4 4 4 4 8 4 4 5 7 4 5 4 6 6 4 4
[739] 4 5 5 4 4 4 4 4 4 4 4 4 5 4 5 4 4 5
[757] 4 4 5 5 4 5 6 5 4 5 5 4 5 5 4 4 5 5
[775] 5 4 5 4 4 7 4 4 4 4 5 4 5 4 4 4 5 5
[793] 5 4 5 5 4 5 4 5 4 5 5 6 4 5 4 4 4 5
[811] 4 5 5 4 4 4 4 6 4 4 4 5 4 4 4 4 4 5
[829] 4 4 4 4 4 6 5 4 4 4 5 5 4 7 4 4 5 4
[847] 5 4 4 4 5 4 5 4 5 4 4 5 4 4 4 4 5 4
[865] 4 4 4 4 4 4 5 4 4 5 6 4 4 4 4 4 4 5
[883] 4 4 5 4 4 5 4 4 4 5 4 4 4 4 4 5 4 4
[901] 4 5 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 4
[919] 5 4 6 4 4 4 4 5 4 4 4 5 4 4 4 4 4 4
[937] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
[955] 4 4 4 5 4 4 5 4 5 4 4 4 4 4 4 4 5 4
[973] 4 4 4 5 4 4 4 5 4 4 4 4 4 4 4 4 4 4
[991] 4 4 4 4 4 4 4 4 4 4 4 4 4 4
d.f $ķ
[1] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
[20] 23 24 25 26 27 29 32 34 37 38 39 40 44 45 47 58 63 79 83
[39] 88 95 102
41 Levels: 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ... 102
d.f $ PK
[1] 0.3237051793 0.2021912351 0.1115537849 0.0906374502 0.0527888446
[6] 0.0368525896 0.0298804781 0.0239043825 0.0169322709 0.0179282869
[11] 0.0129482072 0.0099601594 0.0089641434 0.0029880478 0.0039840637
[16] 0.0019920319 0.0009960159 0.0079681275 0.0019920319 0.0029880478
[21] 0.0049800797 0.0019920319 0.0039840637 0.0039840637 0.0039840637
[26] 0.0009960159 0.0009960159 0.0009960159 0.0009960159 0.0009960159
[31] 0.0009960159 0.0029880478 0.0009960159 0.0009960159 0.0009960159
[36] 0.0009960159 0.0019920319 0.0009960159 0.0009960159 0.0009960159
[41] 0.0019920319
答案 0 :(得分:2)
我认为您的问题来自于d.f$k
是因素:
d.f $ķ 41级:4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ... 102
图中的水平条是因为R试图绘制箱图而不是散点图。鉴于你帖子中的指示量,不清楚为什么d.f $ k是因素而是做
df$k = as.numeric(d.f$k)
应该解决你的问题。
编辑: 正如@MikeWise正确注意到的那样,正确的命令是
df$k = as.numeric(as.character(d.f$k))
需要 as.characters()
,因为因子在内部编码为整数,as.numeric(df$k)
只返回因子的整数代码。 as.character(df$k)
将因子名称转换为字符(并删除因子代码),以便as.numeric(as.character(df$k))
将与每个因素对应的字符转换为数字