2013-01-17 63 views
6

मैं एक्स, वाई, जेड डेटा के साथ परिवर्तनीय जेड का एक समोच्च बनाना चाहता हूं। हालांकि, ऐसा लगता है कि हमें डेटा को बढ़ते क्रम में प्रदान करने की आवश्यकता है।क्या आर में निरंतर डेटा के बिना 3 डी समोच्च साजिश बनाना संभव है?

मैंने कुछ कोड का उपयोग करने की कोशिश की लेकिन मुझे त्रुटि मिली।

मैंने कोशिश की निम्नलिखित कोड: परीक्षण 1:

age2100 <- read.table("temp.csv",header=TRUE,sep=",") 

x <- age2100$x 
y <- age2100$y 
z <- age2100$z 

contour(x,y,z,add=TRUE,col="black") 

मैं निम्न त्रुटि

Error in contour.default(x, y, z, add = TRUE, col = "black") : increasing 'x' and 'y' values expected 

मैं तो समोच्च बनाने के लिए ggplot2 का उपयोग करने की कोशिश की हो गया।

library("ggplot2") 
library("MASS") 
library("rgdal") 
library("gpclib") 
library("maptools") 
age2100 <- read.table("temp.csv",header=TRUE,sep=",") 
v <- ggplot(age2100, aes(age2100$x, age2100$y,z=age2100$z))+geom_contour() 
v 

मैं निम्नलिखित त्रुटि मिली:

चेतावनी संदेश: मैं निम्नलिखित कोड का इस्तेमाल किया

Not possible to generate contour data 

कृपया निम्न स्थान का डेटा प्राप्त https://www.dropbox.com/s/mg2bo4rcr6n3dks/temp.csv

किसी को भी मुझे बता सकते हैं temp.csv से तीसरे चर (z) से समोच्च डेटा कैसे बनाएं? मुझे इन्हें कई बार करने की ज़रूरत है इसलिए मैं आर्कजीस के बजाय आर पर करने की कोशिश कर रहा हूं।

+0

बस एक लंबे शॉट, आप की कोशिश की है 'age2100 <- age2100' –

+0

@ sebantian-सी [(age2100, आदेश (एक्स, वाई)), के साथ] मैं सिर्फ अपने सुझाव का इस्तेमाल किया। मैंने डेटा की जांच की और इसे सॉर्ट किया गया है लेकिन फिर भी मैं ग्राफ प्राप्त करने में सक्षम नहीं हूं। मैंने फिर ऊपर वर्णित दोनों विधियों की कोशिश की। मुझे अब भी वही त्रुटि मिलती है। –

+0

मेरा मानना ​​है कि आपको एक पूर्ण मैट्रिक्स की आवश्यकता है - आप पैकेज 'अकिमा' के 'इंटरप' फ़ंक्शन का उपयोग करके अपने xyz डेटा के साथ एक को विभाजित कर सकते हैं। –

उत्तर

8

यहाँ कैसे एक interpolates akima पैकेज से interp का उपयोग करने का एक उदाहरण है:

age2100 <- read.table("temp.csv",header=TRUE,sep=",") 

x <- age2100$x 
y <- age2100$y 
z <- age2100$z 

require(akima) 

fld <- interp(x,y,z) 

par(mar=c(5,5,1,1)) 
filled.contour(fld) 

enter image description here

यहाँ image समारोह का उपयोग कर एक वैकल्पिक भूखंड है (यह निचले स्तर अंकन जोड़ने के लिए कुछ लचीलापन देता है कार्यों (image.scale फ़ंक्शन की आवश्यकता है, here मिला):

source("image.scale.R") # http://menugget.blogspot.de/2011/08/adding-scale-to-image-plot.html 

x11(width=5, height=6) 
layout(matrix(c(1,2), nrow=1, ncol=2), widths=c(4,1), height=6, respect=TRUE) 
layout.show(2) 

par(mar=c(4,4,1,1)) 
image(fld) 
contour(fld, add=TRUE) 
points(age2100$x,age2100$y, pch=".", cex=2) 

par(mar=c(4,0,1,4)) 
image.scale(fld$z, xlab="", ylab="", xaxt="n", yaxt="n", horiz=FALSE) 
box() 
axis(4) 
mtext("text", side=4, line=2.5) 

enter image description here

+0

मार्क, आपके समाधान के लिए बहुत बहुत धन्यवाद। साजिश वास्तव में अच्छा लग रहा है। मेरा एक सवाल है। जब मैं उपरोक्त साजिश पर अंक जोड़ता हूं तो ऐसा लगता है कि अंक बनाए गए समोच्च रेखाओं से थोड़ा कम हैं। शायद मैं गलत हो सकता हूँ। क्या उपरोक्त साजिश में अंक जोड़ना संभव है? मैंने साजिश बिंदुओं के बाद निम्नलिखित कोड का उपयोग किया (आयु 2100 $ x, आयु 2100 $ y, pch = 0)। क्या साजिश में लाइनों को भी दिखाना संभव है? समोच्च अंतराल को निर्दिष्ट करने की तरह और फिर रेखाएं दिखाएंगी। –

+0

हां, जाली समारोह 'fill.contour' (और अन्य) डिवाइस क्षेत्र को विभाजित करते हैं, और इस प्रकार आप केवल साजिश में निम्न स्तर के भूखंड नहीं जोड़ सकते हैं। यह सुंदर नहीं है, लेकिन मैंने इन अतिरिक्तताओं में आपकी सहायता के लिए कुछ पंक्तियां जोड़ दी हैं। मैं इस कारण के लिए रंग पैमाने को जोड़ने के लिए लगातार अपने स्वयं के फ़ंक्शन का उपयोग करता हूं। –

+0

कोड संपादित करने के लिए बहुत बहुत धन्यवाद। मैं बस सोच रहा था कि क्या एक आकृति फाइल जोड़ना संभव है और फिर समोच्च डेटा के हिस्से को क्लिप करना संभव है और फिर केवल आकारफाइल के भीतर समोच्च दिखाएं?क्या आप मुझे कुछ सुझाव दे सकते हैं कि इसे कैसे प्राप्त किया जा सकता है? –