आर

2015-12-31 6 views
11

में किसी क्षेत्र पर प्लॉट पॉइंट्स क्या आप आर में इस तरह की साजिश बनाने में मेरी मदद कर सकते हैं?आर

enter image description here

मेरे पास करने के लिए यह इंटरैक्टिव इस तरह मैं क्षेत्र बारी बारी से कर सकते हैं कि चाहते हैं। मुझे लगता है मुझे rgl का उपयोग करना चाहिए। मुझे here की आवश्यकता के समान उदाहरण मिला, हालांकि मुझे एक भरे हुए क्षेत्र की बजाय ग्रिड खींचने का कोई तरीका नहीं मिला।

युपीडी: एक प्रतिलिपि प्रस्तुत करने योग्य डाटासेट सवाल का जवाब देने में मदद कर सकता है कि (मैं इसे here से लिया):

u <- runif(1000,0,1) 
v <- runif(1000,0,1) 
theta <- 2 * pi * u 
phi <- acos(2 * v - 1) 
x <- sin(theta) * cos(phi) 
y <- sin(theta) * sin(phi) 
z <- cos(theta) 
library("lattice") 
cloud(z ~ x + y) 

उत्तर

17

प्रारंभ

library("rgl") 
spheres3d(0,0,0,lit=FALSE,color="white") 
spheres3d(0,0,0,radius=1.01,lit=FALSE,color="black",front="lines") 

के साथ एक "wireframe" क्षेत्र बनाने के लिए (मैं मैं दो गोलाकारों को खींचकर थोड़ा सा धोखा दे रहा हूं, एक दूसरे से थोड़ा बड़ा ... ऐसा करने का एक बेहतर तरीका हो सकता है, लेकिन मैं इसे आसानी से/जल्दी से समझ नहीं पाया)।

Wolfram web page on sphere point picking (अपनी तस्वीर के स्रोत) हम

इसी तरह मिल से

, हम यू चुन सकते हैं = क्योंकि (PHI) समान रूप से वितरित किया जाना है (ताकि हम डु = पाप फ़ाई dphi है) और प्राप्त अंक x = sqrt(1-u^2)*cos(theta); y = sqrt(1-u^2)*sin(theta); z=u [0,2pi) में थेटा और [-1,1] में, जो एस^2 पर समान रूप से वितरित किए जाते हैं।

तो:

set.seed(101) 
n <- 50 
theta <- runif(n,0,2*pi) 
u <- runif(n,-1,1) 
x <- sqrt(1-u^2)*cos(theta) 
y <- sqrt(1-u^2)*sin(theta) 
z <- u 
spheres3d(x,y,z,col="red",radius=0.02) 

क्षेत्रों रेंडर करने के लिए थोड़ा और अधिक प्रयास करना लेकिन points3d() (फ्लैट वर्ग) के परिणामों की तुलना में खूबसूरत हैं ...

enter image description here

+0

के लिए एक नोट मैवरिक्स + मैक उपयोगकर्ता। यदि आप वर्तमान संस्करण के स्रोत से संकलित करते हैं: rgl_0.95.1435, आप CRAN पर बाइनरी संस्करण के मुकाबले बेहतर परिणाम प्राप्त कर सकते हैं। –

+0

क्या क्षेत्र में बैक पॉइंट दिखाने से बचाना संभव है? इसे पारदर्शी बनाने के लिए? – desa