2013-06-23 10 views
10

मैं निम्नलिखित 3 डी साजिश है:प्रारूपण

ro

मेरी मैं निम्नलिखित कोड के साथ बनाया data साथ

:

library(rugarch) 
library(rgl) 
library(fGarch) 

fd <- as.data.frame(modelfit, which = 'density') 
color <- rgb(85, 141, 85, maxColorValue=255) 

x <- seq(-0.2, 0.2, length=100) 
y <-c(1:2318) 

f <- function(s, t) { 
dged(s,mean=fd[t,'Mu'],sd=fd[t,'Sigma'],nu=fd[t,'Shape']) 

} 

z <- outer(x, y, f) 
persp3d(x, y, z, theta=50, phi=25, expand=0.75, col=color, 
     ticktype="detailed", xlab="", ylab="time", zlab="",axes=TRUE) 

मैं कैसे एक रंग के आधार पर प्राप्त कर सकते हैं जेड मान? मैंने विभिन्न समाधानों को देखा, उदा। यह one, लेकिन मैं इस मामले में जेड मानों के आधार पर रंग नहीं बना सका। this thread के अनुसार समाधान निम्न होगा:

nrz <- nrow(z) 
ncz <- ncol(z) 
jet.colors <- colorRampPalette(c("#ffcccc", "#cc0000")) 
# Generate the desired number of colors from this palette 
nbcol <- 100 
color <- jet.colors(nbcol) 

# Compute the z-value at the facet centres 
zfacet <- z[-1, -1] + z[-1, -ncz] + z[-nrz, -1] + z[-nrz, -ncz] 
# Recode facet z-values into color indices 
facetcol <- cut(zfacet, nbcol) 

    persp3d(x, y, z, theta=50, phi=25, expand=0.75, col=color[facetcol], 
      ticktype="detailed", xlab="", ylab="time", zlab="",axes=TRUE) 

लेकिन बाद से यह भूखंड उचित रंग नहीं है यह एक अच्छा परिणाम नहीं देता है,। मैं अपनी सतह की स्पाइक्स होना चाहता हूं उदा। लाल और कम मूल्यों में उदा। नीले रंग में एक अच्छा चिकनी संक्रमण के साथ, लेकिन इस तरह के रंग स्लाइस रंग, तो समय के आधार पर? तो चरम बड़े स्पाइक्स लाल रंग में अपने स्पाइक्स पर रंग और नीचे के मानों को रंगा जाना चाहिए। हरे में। मैं यह कैसे प्राप्त कर सकता हूं?

संपादित करें: मुझे अक्ष पर तारीख के बारे में मेरे पिछले प्रश्न का समाधान मिला, केवल एक ही समस्या शेष है, जेड मानों पर निर्भर एक उचित रंग है।

+0

कृपया ध्यान दें: मुझे नहीं पता कि क्यों मुझे कार्यक्षेत्र खोलने से पहले आरजीएल पैकेज लोड करना है अन्यथा मेरे आर क्रैश, मुझे नहीं पता क्यों। –

उत्तर

21

इस प्रयास करें:

nbcol = 100 
color = rev(rainbow(nbcol, start = 0/6, end = 4/6)) 
zcol = cut(z, nbcol) 
persp3d(x, y, z, theta=50, phi=25, expand=0.75, col=color[zcol], 
     ticktype="detailed", xlab="", ylab="time", zlab="",axes=TRUE) 

theplot

आप रंग समय से होने के लिए (ताकि कीलें हमेशा लाल कर रहे हैं) आप प्रत्येक के लिए रंग सेट कर सकते हैं चाहते हैं समय टुकड़ा:

mycut = function(x, breaks) as.numeric(cut(x=x, breaks=breaks)) # to combine different factors 
zcol2 = as.numeric(apply(z,2, mycut, breaks=nbcol)) 
persp3d(x, y, z, theta=50, phi=25, expand=0.75, col=color[zcol2], 
     ticktype="detailed", xlab="", ylab="time", zlab="",axes=TRUE) 

theplot2

आप पहले से ही अक्षों को सही तरीके से संपादित करने के बारे में जानते हैं।

+1

ये दोनों उत्कृष्ट उत्तर हैं, आपकी मदद के लिए बहुत बहुत धन्यवाद! –

6

कुल्हाड़ियों पर नियंत्रण पर जोर के लिए, आपको persp3d कॉल में axes=FALSE स्थापित करने के लिए (के रूप में आप कल कहा गया था), और फिर अपनी पसंद के तर्क के साथ axes3d और axis3d कार्यों का उपयोग की जरूरत है। निचले yz- बॉक्स सेगमेंट के साथ प्रदर्शित मानों के साथ एक्स अक्ष निर्दिष्ट करने के लिए, edge= 'x--' का उपयोग करें। , Rownames साथ y- अक्ष लेबल करने के लिए तर्क 'पर' 'लेबल' और का उपयोग करें:

plot3d (..., axes=FALSE, ...) 
# repositions x axis and draws default z axis 
axes3d(c('x--','z')) 
# Use custom labels 
axis3d(edge= 'y+-', at =seq(500,2000,by=500), 
        labels = rownames(fd)[seq(500,2000,by=500)]) 

enter image description here

(नोट: ठीक से इस अतः खेल खेलने के लिए, आप दूसरों के लिए क्रेडिट देने की आवश्यकता है जो मदद की पेशकश की है। यह a question from yesterday से बहुत अलग नहीं है और मुझे वहां सहायक योगदानों के लिए कोई सकारात्मक प्रतिक्रिया नहीं दिखाई दे रही है। मुझे आश्चर्य है कि लोग अनिच्छुक हो रहे हैं।)

+5

मेरा स्केलिंग "स्पष्ट रूप से गलत नहीं है" (वांछित धुरी एनोटेशन कभी निर्दिष्ट नहीं किया गया था), लेकिन आपकी प्रतिक्रिया स्पष्ट रूप से मेरे लिए पुष्टि कर रही है कि मेरे प्रयासों को आगे बढ़ाने में थोड़ा सा बिंदु होगा। –

4

निम्नलिखित रंगों पर आपके प्रश्न का उत्तर देने का एक समाधान है जेड मानों के आधार पर सतह। विचार इसकी (सापेक्ष) ऊंचाई के आधार पर सतह के प्रत्येक बिंदु पर रंग असाइन करना है। नीचे दिए गए कोड में @DWin द्वारा प्रस्तावित धुरी अनुकूलन शामिल है।

library(rugarch) 
library(rgl) 
library(fGarch) 

fd <- as.data.frame(modelfit, which = 'density') 
x <- seq(-0.2, 0.2, length=100) 
y <- c(1:2318) 

f <- function(s, t) { 
    dged(s,mean=fd[t,'Mu'],sd=fd[t,'Sigma'],nu=fd[t,'Shape']) 
} 

z <- outer(x, y, f) 

## Color definition of each point of the surface 
height <- (z - range(z)[1])/diff(range(z)) 
r.prop <- height 
g.prop <- 0 
b.prop <- 1 - height 
color <- rgb(r.prop, g.prop, b.prop, maxColorValue=1) 

persp3d(x, y, z, theta=50, phi=25, expand=0.75, col=color, 
     ticktype="detailed", xlab="", ylab="time", zlab="",axes=FALSE) 
axes3d(c('x--','z')) 
# Use custom labels 
axis3d(edge= 'y+-', at =seq(500,2000,by=500), 
     labels = rownames(fd)[seq(500,2000,by=500)]) 

theplot

+0

ये दोनों उत्कृष्ट उत्तर हैं, आपकी मदद के लिए बहुत बहुत धन्यवाद! –

संबंधित मुद्दे