R:xlim,ylim和zlim不适用于rgl.plot3d

时间:2012-03-10 16:26:09

标签: r

我正在尝试使用以下脚本创建三维散点图:

d <- read.table(file='myfile.dat', header=F)
plot3d(
    d,
    xlim=c(0,20),
    ylim=c(0,20),
    zlim=c(0,10000),
    xlab='Frequency',
    ylab='Size',
    zlab='Number of subgraphs',
    box=F,
    type='s',
    size=0.5,
    col=d[,1]
)
lines3d(
    d,
    xlim=c(2,20),
    ylim=c(0,20),
    zlim=c(0,10000),
    lwd=2,
    col=d[,1]
)
grid3d(side=c('x', 'y+', 'z'))

现在由于某种原因,R忽略了我指定的范围限制并使用了任意值,弄乱了我的情节。运行脚本时没有错误。有人知道什么是错的吗?如果需要,我还可以发布创建的图表的图像。数据文件如下:

MYFILE.DAT

11    2    2
NA    NA    NA
10    2    2
NA    NA    NA
13    2    1
NA    NA    NA
15    2    1
NA    NA    NA
5    2    11
5    3    10
5    4    16
5    5    34
5    6    102
5    7    294
5    8    682
5    9    1439
5    10    2646
5    11    3615
5    12    2844
5    13    1394
NA    NA    NA
4    2    10
4    3    4
4    4    4
4    5    10
4    6    38
4    7    132
4    8    396
4    9    976
4    10    2121
4    11    4085
4    12    6261
4    13    6459
4    14    4238
4    15    1394
NA    NA    NA
7    2    3
NA    NA    NA
6    2    2
NA    NA    NA
9    2    8
9    3    6
9    4    4
9    5    5
NA    NA    NA
8    2    4
8    3    10
8    4    22
8    5    52
8    6    126
8    7    264
8    8    478
8    9    729
8    10    943
8    11    754
8    12    382
NA    NA    NA

2 个答案:

答案 0 :(得分:2)

帮助页面?plot3d说“请注意,由于rgl目前不支持剪辑,因此将绘制所有点,并且'xlim','ylim'和'zlim'将仅用于增加各自的范围。“因此,您需要限制输入阶段的数据。 (如果您只想要绘制体积内的特定范围,则需要使用segments3d而不是lines3d。)

d2 <- subset(d,  d[,1]>0 & d[,1] <20 & d[,2]>0 & d[,2] <20  & d[,3]>0 & d[,3]<10000 ])
plot3d(
    d2[, 1:3],  # You can probably use something more meaningful,
    xlim=c(0,20),
    ylim=c(0,20),
    zlim=c(0,10000),
    xlab='Frequency',
    ylab='Size',
    zlab='Number of subgraphs',
    box=F,
    type='s',
    size=0.5,
    col=d[,1]
)

(我注意到当范围是c(0,10000)时,点的大小几乎是不可见的。进一步的实验表明,范围的巨大差异将导致保持范围的困难。如果你将大小增加到可见的点,则偏低0.如果你使点非常大,它们会扩大范围以适应超出x = 0或y = 0平面的重叠。)

答案 1 :(得分:0)

正如DWin所说,lines3d不处理* lim参数。在帮助页面中,“......材料属性(参见rgl.material),法线和纹理坐标(参见rgl.primitive)。”

那么请使用其他功能,或者您可以从plot3d调用中检索现有限制,并在绘图之前使用这些限制来扩展数据?