如何在R的persp3D协方差矩阵透视图中设置底部水平图例?
实现persp3D图例底部水平放置
我正在用R构建协方差矩阵的3D透视图,现有可复现代码如下,希望将图例放置在底部并设置为水平样式,请问如何通过persp3D()函数实现?
nrows <- 10 ncols <- 10 p <- nrows * ncols Qvariance <- 1 Qrho <- 0.8 alpha <- matrix(rep(1:p, p), nrow = p, ncol = p) JJ <- (alpha - 1) %% nrows + 1 II <- floor((alpha - JJ) / ncols) + 1 LL <- t(JJ) KK <- t(II) d <- sqrt((LL - JJ)^2 + (KK - II)^2) Q <- Qvariance * (Qrho^d) print(dim(Q)) Q[1:5, 1:5] x <- 1:ncol(Q) y <- 1:nrow(Q) # Create a grid of x and y values X <- matrix(x, nrow = nrow(Q), ncol = ncol(Q), byrow = TRUE) Y <- matrix(y, nrow = nrow(Q), ncol = ncol(Q), byrow = FALSE) library(plot3D) persp3D(x = X, y = Y, z = Q, theta = 90, expand = 0.5, xlab = "Columns", ylab = "Rows", scale = FALSE)
解决方案
通过persp3D()的colkey参数可以自定义图例的样式和位置,核心配置如下:
side = 1:指定图例放置在绘图区域底部(side参数取值:1=底部,2=左侧,3=顶部,4=右侧)horizontal = TRUE:将图例设置为水平排列样式length(可选):调整图例的长度比例,让显示更协调
修改后的完整代码:
nrows <- 10 ncols <- 10 p <- nrows * ncols Qvariance <- 1 Qrho <- 0.8 alpha <- matrix(rep(1:p, p), nrow = p, ncol = p) JJ <- (alpha - 1) %% nrows + 1 II <- floor((alpha - JJ) / ncols) + 1 LL <- t(JJ) KK <- t(II) d <- sqrt((LL - JJ)^2 + (KK - II)^2) Q <- Qvariance * (Qrho^d) print(dim(Q)) Q[1:5, 1:5] x <- 1:ncol(Q) y <- 1:nrow(Q) # Create a grid of x and y values X <- matrix(x, nrow = nrow(Q), ncol = ncol(Q), byrow = TRUE) Y <- matrix(y, nrow = nrow(Q), ncol = ncol(Q), byrow = FALSE) library(plot3D) # 配置colkey实现底部水平图例 persp3D(x = X, y = Y, z = Q, theta = 90, expand = 0.5, xlab = "Columns", ylab = "Rows", scale = FALSE, colkey = list(side = 1, horizontal = TRUE, length = 0.8))
内容的提问来源于stack exchange,提问作者Ash
相关产品推荐
相关产品推荐

