2013-07-21 11 views
7

Próbuję dodać stały tytuł do interaktywnej działki 3d za pomocą pakietu rgl z R, ale do tej pory nie byłem w stanie tego zrobić. Chciałbym również mieć jeden główny tytuł i podtytuł pod głównym tytułem.Umieść ustalony tytuł na interaktywnym wykresie 3D przy użyciu pakietu rgl, R

Oto przykładowy kod,

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) 

nie znalazłem dobry sposób mający stałą Nazwa (i napisów) tak, że kiedy wyeksportować wykres jako film 3D, główny tytuł jest nie obraca się z działki ...

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

Jeśli masz dobry/łatwy sposób kładąc główny tytuł w stałej lokalizacji (i ewentualnie dodanie wtórnego tytuł under), że będzie wielki. Z góry dziękuję,

+0

Myślę, że to, czego chcesz, nie jest możliwe dzięki 'rgl'. Możesz rozważyć dodanie tytułu po utworzeniu filmu za pomocą innego oprogramowania. –

Odpowiedz

2

Obecnie nie można tego zrobić w języku angielskim.

+0

Czy istnieje sposób na zdobycie przynajmniej głównego tytułu w stałej lokalizacji w tle, gdy fabuła się porusza? – user1626688

+2

Nie -? Rgl.texts mówi, że tekst jest umieszczony w przestrzeni 3d, zwróconej w stronę użytkownika. Urządzenie graficzne rgl nie używa standardowego systemu plotowania R, więc 'text' nie zadziała,' title' nie zadziała itp. Myślę, że po prostu potrzebuje trochę pracy na poziomie C++, aby zaimplementować statyczny tekst 2d za pomocą ftgl biblioteka, której używa rgl dla swojego tekstu. – Spacedman

+5

Zobacz [tutaj] (http://stackoverflow.com/a/33425187/3001626) –

1

Aby odtworzyć swoją kde skrypt brakuje (biblioteka nie dołączone) ... w każdym razie brałeś pod uwagę przy użyciu: po dodaniu filmu:

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

gdzie: x, y, z są lokalizacje w twojej grafice. Używam tego razem z scatter3d (używając również przy użyciu rgl).

0

Podobnie jak w przypadku sugestii dotyczącej testu, możesz dodać legendę, która pozostaje nieruchoma i używać jej jako tytułu. Patrz poniższy przykład z 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

Umieszczenie tytuł w działce RGL jest obecnie możliwe, to dzięki swojej randki aktualizacji z zeszłego roku.

Chodzi o to, aby użyć nowej funkcji bgplot3d, która wyświetla się na tle okna RGL, tak jakby był to normalny wykres.

Na przykład:

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

Co daje:

                                                                                                RGL title with plot3d and bgplot3d

Jest jeden dość istotne zastrzeżenie choć stwierdził, jako notatkę w pomocy Strona dla bgplot3d:

Ponieważ działki tła są rysowane jako bitmapy, to nie rozmiar bardzo wdzięcznie. Najlepiej najpierw powiększyć rozmiar okna, a następnie narysować tło o tym rozmiarze.

Powiązane problemy