Существует ли функция r для создания 3D-графика Excel? - PullRequest
0 голосов
/ 31 мая 2019

Есть ли способ создать Excel 3D-сюжет в r?

У меня есть матрица, и я хотел бы построить ее в формате 3d-поверхности, используя R. Мне удалось сделать это в Excel, и это дает мне этот график https://drive.google.com/open?id=1hNqCguPX_ar8ueSK-u-yHTUYZxdyT_cE

Я бы хотелпроизводить тот же график, но с R этот график производится с этими данными

m<-matrix(c(7,73,195,195,416,625,120,52,178,178,349,454,6,83,164,164,244,0,3,52,150,150,329,330),nrow = 4, ncol = 6, byrow = T)

1 Ответ

2 голосов
/ 01 июня 2019

К сожалению, используемый набор данных недоступен, поэтому невозможно точно воспроизвести изображение и расширить детали.

Для создания поверхности контура интересно использовать пакет ggplot2 с функцией geom_raster. Но это вернет непрерывную поверхность.

library(ggplot2)
library(dplyr)

x <- seq(1, 6, 1)
y <- seq(0, 3, 1)
grid <- expand.grid(x = x,
                    y = y)
m <- matrix(c(7,73,195,195,416,625,120,52,178,178,349,454,6,
            83,164,164,244,0,3,52,150,150,329,330), 
            nrow = 4, ncol = 6, byrow = T)
m2 <- m %>% 
  t %>% as.data.frame()
grid <- grid %>% 
  dplyr::mutate(response = c(m2$V1, m2$V2, m2$V3, m2$V4))

Palet <- c("royalblue2", "orangered3", "lavenderblush3", "gold3")

ggplot2::ggplot(grid, aes(x, y, z = response)) +
  geom_raster(aes(fill = response)) + 
  scale_fill_gradientn(colours = Palet, limits = c(0, 800)) +
  theme_void() +
  theme(legend.position = "bottom")

enter image description here

Кроме того, можно выполнять манипуляции с данными и работать с дискретными fill. Где для каждого интервала будет назначен цвет.

grid2 <- grid %>% 
  dplyr::mutate(cor = ifelse(response >= 0 & response < 200, 1,
                             ifelse(response >= 200 & response < 400, 2,
                                    ifelse(response >= 400 & response < 600, 3,
                                           ifelse(response >= 600, 4, "error")))))

ggplot2::ggplot(grid2, aes(x, y, z = response)) +
  geom_raster(aes(fill = cor)) + 
  scale_fill_manual(values = Palet, labels = c("0-200", "200-400",
                                               "400-600", "600-800"),
                    name = "") +
  theme_void() +
  theme(legend.position = "bottom")

enter image description here


Однако, если считать, что в матрице m каждая ячейка является интенсивностью, можно создать трехмерный график.

library(plot3D)
persp3D(z = m, theta = 60)

enter image description here

3D-график поверхности из 2D-матрицы

График 3D-данных в R

Впечатляющий пакет для 3D и 4D графиков - программное обеспечение R и визуализация данных

...