2012-08-09 14 views
8

curve आर में फ़ंक्शन एक फ़ंक्शन प्लॉट करने का एक आसान तरीका प्रदान करता है। उदाहरण के लिए, यह एक सीधी रेखाआर में वक्र समारोह के 3 डी समकक्ष?

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

साजिश होगा वहाँ आर में एक बराबर समारोह जो दो तर्क (जैसे, x और y) के साथ एक समारोह लेता है और दोनों चर के लिए पर्वतमाला और एक 3 डी साजिश का उत्पादन है?

उदाहरण के लिए, मैं निम्नलिखित समारोह

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

वहाँ निम्नलिखित के समान एक आदेश है था कल्पना?

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

उत्तर

7

पैकेज में surface3d समारोह: RGL एक अच्छा मैच की तरह लग रहा है। एक रैपर बनाने के लिए यह बहुत आसान होगा जो आपके फ़ंक्शन को ले जाएगा, seq() के साथ वैक्टरों का एक्स-वाई सेट बनाएं और फिर उन वैक्टर को outer पर अपने F2 के साथ FUN तर्क के रूप में पास करें, और फिर surface3d पर कॉल करें।

persp3d भी है जो लेखकों (डंकन मर्डोक और शायद अन्य) कहते हैं "उच्च स्तर" और यह डिफ़ॉल्ट रूप से अक्ष जोड़ना प्रतीत होता है जो सतह 3 डी नहीं करता है।

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

अब मैं इसके बारे में आगे लगता है, तो आप persp() या wireframe() साथ कुछ इसी तरह किया जा सकता है कि। "चाल" बाहरी (..., मज़ा = मज़ा) का उपयोग कर रहा है। और जैसा कि मैं इसके बारे में और भी सोचता हूं ... outer के साथ इसका उपयोग करने की क्षमता सभी वेक्टरीकृत परिचालनों से बना है। अगर वे सदिश नहीं थे, तो हमें Vectorize या mapply के साथ फिर से लिखना होगा।

2

curve3d()package:emdbook में देखें, जो wireframe(), persp3d(), और अधिक के लिए एक रैपर है।

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

persp3d() समारोह एक तर्क के रूप में एक समारोह ले सकते हैं। ?persp3d.function देखें।

यह अनुमति देता है सतह के दो प्रकार साजिश रची जा करने के लिए: x के एक समारोह और y रूप में आप चाहते हैं, और एक पैरामीट्रिक सतह, जहां x, y और z दो अन्य चर के सभी कार्यों को कर रहे हैं।

अपने उदाहरण के लिए, यह उतना ही आसान

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

के रूप में लेकिन निश्चित रूप से आप रंग z पर निर्भर करते हैं, आदि

होने, x और y की सीमा बदलने जैसे तामझाम के सभी प्रकार जोड़ सकते हैं