如何自定义R threejs包生成的3D散点图的轴标签与刻度格式
实现方案
- 轴标签修改:
scatterplot3js原生支持xlab/ylab/zlab参数,直接传入自定义的轴名称即可完成第一个需求。 - z轴刻度加%后缀:由于该包没有内置刻度格式化参数,我们可以通过
htmlwidgets的onRender方法注入少量JavaScript代码,在图表渲染完成后批量修改z轴刻度的文本内容,添加%后缀。
完整可运行代码
library(mvtnorm) library(threejs) library(htmlwidgets) u <- seq(-5, 5, by = .1) v <- seq(-5, 5, by = .1) M <- expand.grid(u,v) x <- M$Var1 y <- M$Var2 sigma <- matrix(c(1, .5, .5, 1), nrow = 2, byrow = TRUE) z <- dmvnorm(x = M, sigma = sigma) scatterplot3js(x, y, z, phi = 40, theta = 20, color = rainbow(length(z)), colkey = FALSE, cex = .3, main = "Bivariate Normal", # 自定义轴标签 xlab = "A 1", ylab = "B 1", zlab = "C 1") %>% # 注入JS修改z轴刻度后缀 onRender(" function(el, x) { setTimeout(function() { const zTicks = document.querySelectorAll('g.axis.z text'); zTicks.forEach(tick => { const text = tick.textContent.trim(); if(text && !text.endsWith('%')) { tick.textContent = text + '%'; } }); }, 500); } ")
如果运行时出现刻度未修改的情况,可适当调大setTimeout里的500毫秒数值,适配不同设备的渲染速度。
内容的提问来源于stack exchange,提问作者Bogaso
相关产品推荐
相关产品推荐

