2012-08-09 14 views
8

Funkcja 01 w języku R zapewnia prosty sposób na wykreślenie funkcji. Na przykład, na tym wykresie linia prosta3D ekwiwalent funkcji krzywej w R?

f1 <- function(x) x 
curve(f1, from=-1, to=1) 

istnieje podobnej funkcji w R, która wykonuje funkcje z dwoma argumentu (np x i y) i wynosi dla obu zmiennych i tworzy wykres 3D?

Na przykład, wyobraź sobie, miałem następującą funkcję

f2 <- function(x, y) x + y 

Czy istnieje polecenie podobne do poniższych?

curve_3d(f2, x_range=c(-1, 1), y_range=c(-1, 1)) 

Odpowiedz

7

surface3d funkcja w opakowaniu: RGL wygląda dobrym meczu. Byłoby bardzo proste utworzenie wrappera, który miałby spełnić twoją funkcję, stworzyć zestaw wektorów x-y z seq(), a następnie przekazać te wektory do outer z twoim f2 jako argumentem FUN, a następnie zadzwonić pod numer surface3d.

Istnieje również persp3d, który autorzy (Duncan Murdoch i być może inni) mówią, że "wyższy poziom" i domyślnie dodaje osie, których surface3d nie ma.

curve_3d <- function(f2, x_range=c(-1, 1), y_range=c(-1, 1), col=1:6){ 
     if (!require(rgl)) {stop("load rgl")} 
     xvec <- seq(x_range[1], x_range[2], len=15) 
     yvec <- seq(y_range[1], y_range[2], len=15) 
     fz <- outer(xvec, yvec, FUN=f2) 
     open3d() 
     persp3d(xvec, yvec, fz, col=col) } 
curve_3d(f2) 
snapshot3d("out3dplane.png") 

Rotatable pseudo3d plot of plane

Teraz myślę o tym dalej można zrobić coś podobnego z persp() lub wireframe(). "Sztuczka" używa zewnętrznego (..., FUN = fun). I jak myślę o tym jeszcze dalej ... możliwość użycia go z outer zależy od tego, czy składa się on ze wszystkich operacji wektoryzowanych. Jeśli nie były wektoryzowane, musielibyśmy przepisać je pod Vectorize lub mapply.

2

Zobacz curve3d() w package:emdbook, która jest opakowaniem dla wireframe(), persp3d() i więcej.

library(emdbook) 
# bivariate normal density with emdbook::curve3d 
curve3d(expr = dmvnorm(x=c(x,y), mu = c(0,0), Sigma = diag(2)), 
    from = c(-3,-3), to = c(3,3), n = 100, sys3d = "wireframe") 
1

Funkcja persp3d() może przyjąć funkcję jako argument. Zobacz ?persp3d.function.

Pozwala on dwa rodzaje powierzchni zostać wykreślone: ​​funkcję x i y jak chcesz, i parametryczną powierzchnię, gdzie x, y i z są wszystkie funkcje dwóch zmiennych.

Dla przykładu, to jest tak proste, jak

f2 <- function(x, y) x + y 
persp3d(f2) 

ale oczywiście można dodać różnego rodzaju ozdobników, jakby kolor zależą z, zmieniając zakres x i y itp

Powiązane problemy