You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 09:01:15