我正在尝试使用以下脚本创建三维散点图:
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
答案 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
调用中检索现有限制,并在绘图之前使用这些限制来扩展数据?