2016-11-15 122 views
7

Üç matrisleri ve üç yükseklik (herhangi bir pozitif reel sayı) ile bir vektör h içeren bir liste a var. Bu matrisler üçgenler, yani prizmanın tabanıdır. Prizmalar oluşturmak için vektör h bilgisini eklemek istiyorum.Plot 3D prizmalar plotly

ben 2D (pplot) grafik çizmek için bir işlev oluşturduk. Prizmaları aşağıdaki şekilde nasıl çizebilirim?

pplot olsun ve oyuncak sorun, bir örnek:

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) 

Grafik

An example desired

istenen a = d, b = f, c = e noktalar vardır ve tüm bilgiler koordinat a.

Gözlem 1: Veri gerekir listesi.

Gözlem 2: Ben portekizce içinde bir yazı oluşturduk, ama kimse cevap. Bunu yapabilir miyim yoksa aldatıyor mu? (Burada yeniyim) https://pt.stackoverflow.com/questions/165538/plotar-figuras-3d-para-dados-em-lista

+0

ben ggplot 3D yapmadım düşündük. Bize bu varsayımın yanlış olduğu kanıtlanmış bir örneğe işaret edebilir misiniz? –

+0

Bir örnekte görülebilir: https://www.r-bloggers.com/3d-plots-with-ggplot2-and-plotly/ –

+0

Bu blogu okuduğumda, 3D razzmatazz yapan komplodur. –

cevap

4

Görevin tamamını doğru anladığımdan emin değilim. Yine de, rgl paketiyle bir çözüm için bir taslak. Daha hızlı daha var ve javascript API'ler (plotly, rthreejs vs.) daha iyi scale çünkü Bence bu, hala Ar en iyi 3B çizim çerçevesi bu.

#### 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) 

sonuçları: enter image description here

+0

Çok teşekkür ederim! –