用ggplot2画3D

栏目: R语言 · 发布时间: 7年前

内容简介:在《我们首先定义一个转换函数:然后我们使用一个3D兔子的坐标来测试一下,当然一般画3D的程序都支持你用鼠标交互,比如旋转角度什么的,但我们用

在《 扪心自问,meme几何? 》一文中,我画了一只兔子,今天给大家演示一下画一只3D版本的兔子,我们知道 ggplot2 不支持3D,只能画2D的图,但3D其实只是视觉上的,显示在你屏幕上的,同样只是2D。所以我们要做的,就是把3D的坐标转换成2D,然后画出2D的图片来,而这2D看上去有3D的效果。

我们首先定义一个转换函数:

trans_3d_2d <- function(data, theta=135, phi=60) {
	pmat <- plot3D::perspbox(z=diag(2), plot=F, theta=theta, phi=phi)
	
	data <- as.data.frame(data)
   XY <- plot3D::trans3D(
       x = data$x,
       y = data$y,
       z = data$z,
       pmat = pmat) %>%
     data.frame()

   data$x <- XY$x
   data$y <- XY$y

	return(data[, c('x', 'y')])
}

然后我们使用一个3D兔子的坐标来测试一下,当然一般画3D的程序都支持你用鼠标交互,比如旋转角度什么的,但我们用 ggplot2 就不可以,我们能做到的,就是在调用上面的转换函数时,指定不同的角度而已。

require(onion)
data(bunny)
d <- trans_3d_2d(bunny)

require(ggplot2)
ggplot(d, aes(x, y, color=x)) + geom_point(alpha=.2)  + 
	coord_flip() + 
	theme(legend.position="none") + 
	scale_y_reverse()

用ggplot2画3D


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C++设计新思维

C++设计新思维

(美)Andrei Alexandrescu / 侯捷、於春景 / 华中科技大学出版社 / 2003-03 / 59.8

本书从根本上展示了generic patterns(泛型模式)或pattern templates(模式模板),并将它们视之为“在C++中创造可扩充设计”的一种功能强大的新方法。这种方法结合了template和patterns,你可能未曾想过,但的确存在。为C++打开了全新视野,而且不仅仅在编程方面,还在于软件设计本身;对软件分析和软件体系结构来说,它也具有丰富的内涵。一起来看看 《C++设计新思维》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具