情节似乎使用r中数据框的数据索引

时间:2017-04-03 20:58:32

标签: r plot

的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)

问题

enter image description here

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

1 个答案:

答案 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))将与每个因素对应的字符转换为数字