【问题标题】:plot seems using data index from data frame in r绘图似乎使用 r 中数据框中的数据索引
【发布时间】:2017-04-11 01:52:11
【问题描述】:

环境

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结束。看来point的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$k

[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

【问题讨论】:

    标签: r plot


    【解决方案1】:

    我认为您的问题来自 d.f$k 是因素:

    d.f$k 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)) 将每个因子对应的字符转换为数字

    【讨论】:

    • 是的,我试过 is.numeric(d.f$k) is.factor(d.f$k) is.numeric(d.f$k[1]) 。它显示 [1] FALSE [1] TRUE [1] FALSE。可能是table 考虑因素。
    • 实际上你通常必须做as.numeric(as.character(d.f$k)),否则它只会将它们转换为因子的数字等价物。用一些假数据试一试,你就会明白我的意思。去过那里,有烧伤的迹象。
    • as.numeric(as.character(d.f$k)) 有效。为什么使用as.character?是另一个问题吗?
    • @xraynaud,如果你能解释为什么你必须使用as.character 会很好......因为你得到了积分:)
    • 这是因为因子在内部被编码为整数。所以 as.numeric(df$k) 只返回因子的整数代码。 as.character(df$k) 将因子名称转换为字符(并删除因子代码)。 as.numeric(as.character(df$k)) 将字符转换为数字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2021-03-19
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    相关资源
    最近更新 更多