我想绘制一个类似于这个例子的数字(见打击)。
这是我的数据集示例。
z <- data.frame(round(runif(977,500,600)))
z_matrix <- t(matrix(z[0:(as.integer(length(z[,])/10) * 10),],as.integer(length(z[,])/10),10))
我可以使用ggplot,image2D,persp和persp3d生成其他一些2D或3D图,但是与上面的3D绘图示例相比,这些图看起来不太好。
我尝试过使用surface3d,但是我遇到了错误。我还尝试使用grid.to.xyz将矩阵格式转换为x.y.z格式,但似乎格式不正确。
此外,颜色梯度随各种数据集中的z范围而变化。我需要&#34;修复&#34;渐变的颜色模式,并将其应用于其他数据集,以便它们可以比较。
我的问题:
感谢您的帮助!
答案 0 :(得分:1)
您可以尝试使用rgl surface3d绘制z_matrix:
library(rgl)
x <- 50*(1:nrow(z_matrix))
y <- 10*(1:ncol(z_matrix))
zlim <- range(z_matrix)
zlen <- zlim[2] - zlim[1] + 1
colorlut <- rainbow(zlen) # height color lookup table
col <- colorlut[ z_matrix - zlim[1] + 1 ] # assign colors to heights for each point
open3d()
surface3d(x, y, z_matrix, color = col, back = "lines")
使用网格线(并且不缩放x,y轴):
x <- 1:nrow(z_matrix)
y <- 1:ncol(z_matrix)
zlim <- range(z_matrix)
zlen <- zlim[2] - zlim[1] + 1
colorlut <- terrain.colors(zlen) #rainbow(zlen) # height color lookup table
col <- colorlut[ z_matrix - zlim[1] + 1 ] # assign colors to heights for each point
open3d()
persp3d(x, y, z_matrix, col = col)
grid3d(c("x", "y+", "z"))
surface3d(x, y, z_matrix, color = col, back = "lines")
答案 1 :(得分:0)
根据我自己的建议并使用火山数据集,这就是我认为与背景所需图像的最佳匹配:
libarary(plot3d)
persp3D(z = volcano, col = "lightblue", shade = 0.5,
ticktype = "detailed", bty = "b2")
这将是最适合工作示例的着色方案,但我认为您可能想要搜索&#34;地形颜色&#34;如果您需要更精确地适合该图像:
PNG(); persp3D(z = volcano,clab = c(&#34; height&#34;,&#34; m&#34;), colkey = list(length = 0.5,shift = -0.1), ticktype =&#34;详细&#34;,bty =&#34; b2&#34;); dev.off()
该软件包正在使用基本图形,因此您需要通过阅读?persp和?persp3D帮助页面来查看轮换选项。这是另一个实验:
png(); persp3D(z = volcano, col=terrain.colors(100), clab = c("height", "m"), xlab="PPM" , ylab="Col", zlab="Height",
colkey=FALSE, theta=25, lighting="specular",
ticktype = "detailed", bty = "b2"); dev.off()