首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与R中的plot3D包重叠的标签

与R中的plot3D包重叠的标签
EN

Stack Overflow用户
提问于 2018-07-31 23:48:56
回答 1查看 615关注 0票数 2

我目前正在使用R中的plot3D包创建一个3D散点图,并且我想将数据标签添加到我的数据点。但是,我的一些数据点彼此具有相同的值,我希望找到一种类似于ggrepel的解决方案,该解决方案可以从这些点偏移数据标签,以便这些点的标签清晰可读。示例代码如下:

代码语言:javascript
复制
library(plot3D)
names <- c("A", "B", "C", "D", "E")
x <- c(1,1,2,3,4)
y <- c(1,1,3,4,5)
z <- c(1,1,4,5,6)

scatter3D(x, y, z)
text3D(x,y,z, names, add = TRUE, cex = 1)

A和B的标签当前相互叠加。

我也尝试使用directlabels包,但它似乎无法识别text3D或plot3D对象。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-09 19:02:33

plotrix::thigmophobe函数用于确定方向,以尝试阻止标签在2D绘图中重叠。rgl没有任何等效的东西,而且由于您可以旋转绘图,所以您总是能够在彼此的顶部旋转标签。但是,下面的函数尝试为一个特定视图放置标签,使它们不会重叠。

代码语言:javascript
复制
thigmophobe.text3d <- function(x, y = NULL, z = NULL, texts, ...) {
  xyz <- xyz.coords(x, y, z)

  # Get the coordinates as columns in a matrix in
  # homogeneous coordinates
  pts3d <- rbind(xyz$x, xyz$y, xyz$z, 1)

  # Apply the viewing transformations and convert 
  # back to Euclidean
  pts2d <- asEuclidean(t(par3d("projMatrix") %*% 
                         par3d("modelMatrix") %*% 
                         pts3d))

  # Find directions so that the projections don't overlap
  pos <- plotrix::thigmophobe(pts2d)

  # Set adjustments for the 4 possible directions
  adjs <- matrix(c(0.5, 1.2,   
                   1.2, 0.5,  
                   0.5, -0.2,  
                  -0.2, 0.5), 
                 4, 2, byrow = TRUE)

  # Plot labels one at a time in appropriate directions.
  for (i in seq_along(xyz$x)) 
    text3d(pts3d[1:3, i], texts = texts[i], 
           adj = adjs[pos[i],], ...)
}

上面的函数有一些问题:它基于rgl::text3d而不是plot3D::text3D,所以可选参数是不同的;它一次绘制一个标签,如果你有很多标签,效率可能会很低,它不做错误检查,等等。

编辑后添加:

未发布的rgl版本0.99.20添加了一个thigmophobe3d函数来执行此操作。现在你只能从https://r-forge.r-project.org/R/?group_id=234或Github mirror https://github.com/rforge/rgl获取它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51617387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档