R语言lattice包wireframe绘图:坐标轴需显示实际数据而非点数
解决wireframe绘图中x轴显示实际beta值的问题
我明白你的问题啦——你希望x轴显示beta的实际取值范围(-0.5到0.5),但当前图里显示的是1到10的点索引。这是因为outer()生成的矩阵z默认用行/列的位置索引作为坐标轴刻度,而不是你定义的beta和mu的实际数值。
解决方案:手动指定坐标轴刻度
你只需要在wireframe()函数的scales参数里,为x轴(以及y轴,如果你也需要的话)设置对应的刻度位置和标签即可。具体来说:
at参数指定刻度在图上的位置(对应矩阵的行/列索引)labels参数设置要显示的实际数值
修改后的完整代码
library(lattice) T <- 40 r <- 0.02 sigma <- 0.1 w <- 100 w0 <- 20 P <- 1.0 gamm <- 0.05 t <- 30 sb <- 0.10 prop <- function(beta, mu){ (mu - r) * (w - w0 - T) * exp(-r * (T - t)) * (mu - (mu - r) * exp(-2 * beta * r * (T - t))) / (gamm * r * sigma^2 * sb * (w - w0 - t)) } beta <- seq(-0.5, 0.5, length= 10) mu <- seq(0.04, 0.09, length= 10) z <- outer(beta, mu, prop) # 移除边框 trellis.par.set("axis.line", list(col="transparent")) # 修改scales参数,指定x轴和y轴的实际刻度 wireframe(z, drape=TRUE, xlab = expression(paste(beta)), ylab=expression(mu), zlab=expression(pi(t)), scale=list(arrows=FALSE, x=list(at=1:length(beta), labels=round(beta, 2)), y=list(at=1:length(mu), labels=round(mu, 2))))
说明
- 我给x轴和y轴都设置了实际数值标签,用
round()函数把数值保留两位小数,让刻度看起来更整洁。 - 如果不需要保留小数,直接用
labels=beta和labels=mu即可。
这样修改后,你的x轴就会显示beta的实际取值(-0.5、-0.39、...、0.5),而不是默认的索引啦!
内容的提问来源于stack exchange,提问作者Vaolter
相关产品推荐
相关产品推荐

