2016-11-15 13 views
7

मेरे पास तीन मैट्रिस और एक वेक्टर h के साथ तीन ऊंचाई (कोई सकारात्मक वास्तविक संख्या) के साथ a सूची है। ये matrices त्रिकोण बनाते हैं, यानी प्रिज्म का आधार है। मैं प्रिज्म बनाने के लिए वेक्टर h की जानकारी जोड़ना चाहता हूं।ggplot2 और साजिश का उपयोग करके प्लॉट 3 डी प्रिज्म

मैंने 2 डी (pplot) में ग्राफिक्स प्लॉट करने के लिए एक फ़ंक्शन बनाया है। मैं नीचे दिए गए आंकड़े के रूप में प्रिज्म कैसे लगा सकता हूं?

pplot करते हैं और एक खिलौना समस्या एक उदाहरण हो:

library(ggplot2) 
pplot <- function(polygon){ 
    polygon <- lapply(polygon, function(x) {colnames(x) <- NULL; x}) 
    vertex_number = nrow(polygon[[1]]) 
    g = ggplot2::ggplot() 
    names(polygon) = 1:length(polygon) 
    k <- plyr::ldply(polygon, function(x) data.frame(x)) 
    g <- ggplot2::ggplot(k, ggplot2::aes(x = X1, y = X2, group = .id)) + ggplot2::geom_polygon(colour = "black", fill = NA) 
    return(g) 
} 

a <- list() 
b1 <- matrix(rnorm(6), ncol = 2) 
b2 <- matrix(rnorm(6), ncol = 2) 
b3 <- matrix(rnorm(6), ncol = 2) 

a[[1]] <- b1 
a[[2]] <- b2 
a[[3]] <- b3 

h <- c(.3, .5, .1) 
#pplot function example 
pplot(a) 

ग्राफिक वांछित

An example desired

कहाँ समन्वय a = d, b = f, c = e कोने कर रहे हैं और सभी जानकारी है a में।

निरीक्षण 1: डेटा को एक सूची चाहिए।

निरीक्षण 2: मैंने पुर्तगाली में एक पोस्ट बनाई है, लेकिन कोई भी उत्तर नहीं दिया। क्या मैं यह कर सकता हूं या धोखा दे रहा है? (मैं यहाँ नया हूँ) https://pt.stackoverflow.com/questions/165538/plotar-figuras-3d-para-dados-em-lista

+0

मैंने सोचा था कि ggplot 3 डी नहीं किया। क्या आप हमें एक उदाहरण के लिए इंगित कर सकते हैं जहां वह अनुमान गलत साबित हुआ है? –

+0

एक उदाहरण में देखा जा सकता है: https://www.r-bloggers.com/3d-plots-with-ggplot2-and-plotly/ –

+0

जैसा कि मैंने ब्लॉग पढ़ा है, यह साजिश है कि 3 डी रैजमैटैज़ कर रहा है। –

उत्तर

4

मैं 100% यकीन है कि मैं सही ढंग से कार्य नहीं समझा जा सका हूँ। फिर भी पैकेज rgl पैकेज के साथ समाधान के लिए एक मसौदा है। मेरी राय में यह अभी भी आर के लिए सबसे अच्छा 3 डी प्लॉटिंग फ्रेमवर्क है, क्योंकि यह जावास्क्रिप्ट एपीआई (साजिश, rthreejs आदि) से काफी तेज़ और स्केल बेहतर है।

#### load package rgl #### 
library(rgl) 

set.seed(1232) 

#### construct test list with coordinate matrices #### 
a <- list() 
b1 <- matrix(rnorm(6), ncol = 2) 
b2 <- matrix(rnorm(6), ncol = 2) 
b3 <- matrix(rnorm(6), ncol = 2) 

a[[1]] <- b1 
a[[2]] <- b2 
a[[3]] <- b3 

#### define test height vector #### 
h <- c(.3, .5, .1) 

#### simple plot prism function #### 
# a: list with coordinate matrices 
# h: height vector 
plotprism <- function(a, h){ 
    # general loop to plot every prism 
    for(i in 1:length(h)){ 
    # transform matrizes to data.frames and add height column 
    # -> separation of top and bottom triangle 
    top <- data.frame(a[[i]], h[i]) 
    bottom <- data.frame(a[[i]], 0) 
    # adjust colnames to axis names 
    colnames(top) <- c("x", "y", "z") 
    colnames(bottom) <- c("x", "y", "z") 
    # plot triangles (as wireframes) 
    triangles3d(bottom, front = "line", back = "line") 
    triangles3d(top, front = "line", back = "line") 
    # plot vertical lines to connect the triangles 
    for(i in 0:2){ 
     segments3d(
     x = c(bottom$x[1+i], top$x[1+i]), 
     y = c(bottom$y[1+i], top$y[1+i]), 
     z = c(bottom$z[1+i], top$z[1+i]) 
    ) 
    } 
    } 
    #### add coordinate system #### 
    axes3d() 
} 

#### call plot function for test data #### 
plotprism(a, h) 

परिणाम: enter image description here

+0

आपको बहुत बहुत धन्यवाद! –

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