2013-07-21 13 views
7

Ich versuche, einen festen Titel zu einem interaktiven 3D-Plot mit dem RGL-Paket von R hinzufügen, aber bisher konnte ich es nicht tun. Ich hätte auch gern einen Haupttitel und einen Untertitel unter dem Haupttitel.Setzen Sie einen festen Titel in ein interaktives 3D-Plot mit RGL-Paket, R

Hier ist ein Beispielcode,

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) 

Ich habe eine gute Möglichkeit, einen festen Titel von (und Untertitel) nicht gefunden, so dass, wenn ich meine Handlung als 3D-Film zu exportieren, der Haupttitel ist nicht mit dem Grundstück rotierende ...

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

Wenn Sie eine gute/einfache Möglichkeit, den Haupttitels in einer festen Position des Setzens (und möglicherweise einen sekundären Titels unter Zugabe), die groß sein. Vielen Dank im Voraus,

+0

Ich denke, was Sie wollen, ist nicht mit 'rgl' möglich. Sie könnten erwägen, den Titel hinzuzufügen, nachdem Sie den Film mit einer anderen Software erstellt haben. –

Antwort

2

Dies kann derzeit nicht in rgl getan werden.

+0

Gibt es eine Möglichkeit, mindestens den Haupttitel an einem festen Ort im Hintergrund zu haben, während sich die Handlung bewegt? – user1626688

+2

Nein -? Rgl.texts sagt, dass der Text im 3D-Raum positioniert ist und dem Benutzer zugewandt ist. Das rgl-Grafikgerät verwendet nicht das Standard-R-Plotting-System, so dass 'text' nicht funktioniert,' title' wird nicht funktionieren. Ich denke, es braucht nur etwas Arbeit auf C++ - Ebene, um 2D-Text mit dem ftgl zu implementieren Bibliothek, die rgl für seinen Text verwendet. – Spacedman

+5

Siehe [hier] (http://stackoverflow.com/a/33425187/3001626) –

1

Um Ihr Skript kde fehlt (eine Bibliothek nicht im Lieferumfang enthalten), ... in jedem Fall zu reproduzieren Haben Sie in Betracht ziehen: nach dem Film hinzugefügt:

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

wo: x, y, z Standorte sind in deiner Grafik. Ich benutze das zusammen mit scatter3d (auch mit rgl).

0

Ähnlich wie beim Testvorschlag können Sie eine Legende hinzufügen, die stationär bleibt und sie als Titel verwenden. Siehe Beispiel unten von 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)) 
12

einen Titel in einem RGL Grundstück zu platzieren, ist jetzt möglich dank eines Update aus dem letzten Jahr.

Die Idee ist, die neue Funktion bgplot3d zu verwenden, die in den Hintergrund des RGL-Fensters ausgibt, als ob es eine normale Grafik wäre.

Zum Beispiel:

# 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 
}) 

Welche gibt:

                                                                                                RGL title with plot3d and bgplot3d

Es ist eine ziemlich wichtige Einschränkung angegeben aber als Notiz in der Hilfe Seite für bgplot3d:

Da der Hintergrund Plots als Bitmaps gezeichnet werden, sie die Größe nicht sehr anmutig. Am besten ist es, zuerst das Fenster zu skalieren und dann den Hintergrund in dieser Größe zu zeichnen.