【问题标题】:Put a fixed title in an interactive 3D plot using rgl package, R使用 rgl 包 R 在交互式 3D 图中放置固定标题
【发布时间】:2013-07-20 15:07:46
【问题描述】:

我正在尝试使用 R 中的 rgl 包为交互式 3d 绘图添加固定标题,但到目前为止我还无法做到。我也想在主标题下有一个主标题和一个副标题。

这是一个示例代码,

library(rgl)

data<-read.table(text="          X         Y         Z
                 1  147.0883 -18.69122 -13.90000
                 2  147.0894 -18.69455 -10.97250
                 3  147.0883 -18.69122 -17.45000
                 4  147.0883 -18.69122 -15.44000
                 5  147.0883 -18.69122 -13.45000
                 6  147.0909 -18.69922 -12.25000
                 7  147.0883 -18.69122 -17.30000
                 8  147.0883 -18.69122 -16.40000
                 9  147.0883 -18.69122 -14.30000
                 10 147.0883 -18.69122 -18.50000
                 11 147.0883 -18.69122 -15.67606
                 12 147.0883 -18.69122 -17.25780
                 13 147.0883 -18.69122  -3.64000
                 14 147.1164 -18.68133 -22.13000
                 15 147.0883 -18.69122 -18.54778
                 16 147.0883 -18.69122 -15.50000
                 17 147.1185 -18.68691 -14.55500
                 18 147.0883 -18.69122 -18.12500
                 19 147.0901 -18.69670 -14.39767",header=T)

data

a<-as.matrix(data)

# call the plug-in bandwidth estimator 
H.pi<-Hpi(a,binned=TRUE)*3 ## a is a matrix of x,y,z points 

# calculate the kernel densities 
fhat<-kde(a,H=H.pi)

# produce a 3D plot
open3d()

title<-"Individual 1 (male)" # main title
title2<-"Site A" # subtitle

plot(fhat,cont=c(50,95),colors=c("green","red"),drawpoints=TRUE,
     xlab="",ylab="", zlab="",size=1.5,ptcol="black", 
     axes=F,box=T,aspect=c(1,1,0.5),zlim=c(-40,0))

axes3d(c("x--","y--","z-+"),cex=0.8)
mtext3d("Longitude",edge="x--",line=3,las=2,cex=1.1)
mtext3d("Latitude",edge="y--",line=3,las=2,cex=1.1)
mtext3d("Depth (m)",edge="z-+",line=3,las=2,cex=1.1)

title3d(main=title,sub=title2,line=4)

我还没有找到固定标题(和副标题)的好方法,这样当我将情节导出为 3D 电影时,主标题不会随情节旋转...

movie3d(spin3d(axis=c(0,0,1), rpm=4),dir="~/Dropbox/R/Sample plots", duration=15, fps=10, movie="Plot 1")

如果您有一种很好/简单的方法将主标题放在固定位置(并可能在下面添加辅助标题),那就太好了。提前致谢,

【问题讨论】:

  • 我认为rgl 无法实现您想要的。您可以考虑在使用其他软件创建电影后添加标题。

标签: r plot title interactive rgl


【解决方案1】:

要重现您的脚本,缺少 kde(不包括库)...无论如何 您是否考虑使用:在电影后添加:

text3d(x=0.08, y=0.97, z=0.03, title.main ,col="Blue")

其中:x,y,z 是图形中的位置。我已经将它与 scatter3d 一起使用(也使用 rgl)。

【讨论】:

    【解决方案2】:

    现在可以在 RGL 图中添加标题,这要归功于去年的更新。

    这个想法是使用新函数bgplot3d 输出到 RGL 窗口的背景,就好像它是一个正常的绘图一样。

    例如:

    # A minimal plot3d example
    library(rgl)
    a = matrix(runif(3000), ncol=3)
    plot3d(a, col = rainbow(100)[cut(a[,1], breaks = seq(0,1,le=101), include.lowest = T)])
    
    bgplot3d({
      plot.new()
      title(main = 'This is the main title', line = 3)
      mtext(side = 1, 'This is a subtitle', line = 4)
      # use here any other way you fancy to write your title
    })
    

    这给出了:

                                                  

    不过,有一个非常重要的警告,在bgplot3d 的帮助页面中作为注释说明:

    因为背景图被绘制为位图,它们不会调整大小 非常优雅。最好先调整窗口大小,然后绘制 那个尺寸的背景。

    【讨论】:

      【解决方案3】:

      与关于测试的建议类似,您可以添加一个保持静止的图例并将其用作您的标题。请参阅下面来自Adding a legend to an rgl 3d plot的示例

      legend3d("topright", legend = paste('Type', c('A', 'B', 'C')), pch = 16, col = rainbow(3), cex=1, inset=c(0.02))
      

      【讨论】:

        【解决方案4】:

        目前在 rgl 中无法做到这一点。

        【讨论】:

        • 有没有办法在情节移动时至少将主标题放在背景中的固定位置?
        • 否 - ?rgl.texts 表示文本位于 3d 空间中,面向用户。 rgl 图形设备不使用标准 R 绘图系统,因此 text 不起作用,title 不起作用等等。我认为它只需要在 C++ 级别进行一些工作即可使用 ftgl 实现 2d 静态文本rgl 用于其文本的库。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多