R:xlim、ylim和zlim不适用于rgl.plot3d
我正在尝试使用以下脚本创建三维散点图:R:xlim、ylim和zlim不适用于rgl.plot3d,r,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,
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'))
正如DWin所说,
lines3d
不处理*lim参数。从帮助页面,“…材质属性(请参见rgl.Material)、法线和纹理坐标(请参见rgl.primitive)。”因此,请使用其他功能,或者您可以从
plot3d
调用中检索现有限制,并在打印之前使用这些限制来缩放数据。帮助页面,?plot3d
显示“请注意,由于rgl当前不支持剪裁,因此将绘制所有点,“xlim”、“ylim”和“zlim”将仅用于增加各自的范围。”因此,您需要在输入阶段限制数据。(如果只需要打印体积内的特定范围,则需要使用segments3d
而不是lines3d。)
d2 0&d[,1]0&d[,2]0&d[,3]一个可复制的示例(带有演示您看到的行为的数据和代码)这比图像有用得多。我这么说是因为当我在我的计算机上运行plot3d
时,会对xlim
等做出响应。变化很好。我猜你的抱怨是lines3d
没有遵守你的限制,但是因为常规的line
函数不遵守这些参数,你不应该这样做吗再想一想?为什么不使用segments3d???@DWin err,这就是我正在使用的代码。我还能提供什么呢?这是给我错误的代码。我也在为plot3d提供范围。为什么没有响应?@DWin我只是尝试在不使用lines3d的情况下打印。相同的结果。x和y的范围都在-20到40之间,这是不正确的我到底想要什么。@DWin好的,很明显,如果我将类型设置为除“s”之外的任何值,那么范围将得到尊重。这真的很奇怪。有人知道这是什么吗?请看我上面的评论。谢谢。嗯,请阅读我以前的评论。我不想剪辑数据。数据已经在我指定的范围内。问题是p当使用类型“s”时,lot3d似乎忽略了范围。结果是绘图过于精简。我阅读了您的所有注释。但是您说您收到了错误,但没有提供错误消息或对象的任何描述d
。在这些条件下使用子集可能会更省钱,请查看我的编辑是否有帮助。错误,否。我说我没有收到错误。数据打印得很好。只是当我使用类型“s”时,轴范围是任意设置的。请注意,当我使用其他类型(如“p”)时,范围设置正确。这有助于显示我的数据吗?尽管我认为这并不重要,因为它打印得很好。我认为包含数据会有很大帮助。啊。我认为exp那就放吧。球体对于绘图来说太大了,所以它扩大了范围。谢谢。我想我就用“p”吧。
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
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]
)