前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言三维图的绘制

R语言三维图的绘制

作者头像
一粒沙
发布2019-11-10 17:31:57
6.4K0
发布2019-11-10 17:31:57
举报
文章被收录于专栏:R语言交流中心R语言交流中心

R语言在可视化方面的地位是毋庸置疑的,但是呢相对于MatalabR语言在三维图形的展示上存在一定的劣势。当然,作为大众的免费软件,指定不服,很多人为此也基于R语言开发了一些相应的三维图的绘制包,像rgl,gg3D,plot3D,scatterplot3d等,我们今天就介绍一下其中的scatterplot3d。

包的安装就不赘述了:

代码语言:javascript
复制
install.packages(“scatterplot3d”)

接下来我们看下它里面的函数,其实这个包就一个函数scatterplot3d。

其中主要的参数:

Xlim,ylim,zlim 主要是标注坐标轴范围的。

Color主要指的每个点的颜色,如果不分组那就直接一个颜色就看可以,如果颜色分组,那需要标注每一个样本的颜色。

Type 主要是设置点绘制形式,p-点;h-柱子;l-线,就是将所有点连起来。

Lwd 主要是设置竖线的粗细。

接下来我们就看下包自带的五个例子:

1. 基础的函数三维图绘制:

代码语言:javascript
复制
z<- seq(-10, 10, 0.01)
  x<- cos(z)
  y<- sin(z)
 scatterplot3d(x, y, z, col.axis="blue",
     col.grid="lightblue", main="scatterplot3d - 1",pch=20)

2. 单纯的点的三维图绘制:

代码语言:javascript
复制
temp <- seq(-pi, 0, length = 50)
  x<- c(rep(1, 50) %*% t(cos(temp)))
  y<- c(cos(temp) %*% t(sin(temp)))
  z<- c(sin(temp) %*% t(sin(temp)))
 scatterplot3d(x, y, z, col.axis="blue",col.grid="lightblue", main="scatterplot3d - 2", pch=20)

3. 对于不同的分组的数据的多颜色赋值:

代码语言:javascript
复制
temp <- seq(-pi, 0, length = 50)
  x<- c(rep(1, 50) %*% t(cos(temp)))
  y<- c(cos(temp) %*% t(sin(temp)))
  z<- 10 * c(sin(temp) %*% t(sin(temp)))
 color <- rep("green", length(x))###颜色赋值
 temp <- seq(-10, 10, 0.01)
  x<- c(x, cos(temp))
  y<- c(y, sin(temp))
  z<- c(z, temp)
 color <- c(color, rep("red", length(temp)))####颜色赋值
 scatterplot3d(x, y, z, color, pch=20, zlim=c(-2, 10),main="scatterplot3d - 3")

4. 添加竖线的三维图的绘制:

代码语言:javascript
复制
my.mat <- matrix(runif(25), nrow=5)
 dimnames(my.mat) <- list(LETTERS[1:5], letters[11:15])
 my.mat # the matrix we want to plot ...

如果不是x,y,z格式的输入数据也可以参考下面的data.frame进行数据的整体输入

代码语言:javascript
复制
s3d.dat <- data.frame(cols=as.vector(col(my.mat)),rows=as.vector(row(my.mat)), value=as.vector(my.mat))
 scatterplot3d(s3d.dat,type="h", lwd=5, pch=" ",x.ticklabs=colnames(my.mat),y.ticklabs=rownames(my.mat), color=grey(25:1/40), main="scatterplot3d -4")

5. 如何添加拟合的平面图:

代码语言:javascript
复制
data(trees)
  s3d<- scatterplot3d(trees, type="h", highlight.3d=TRUE,
     angle=55, scale.y=0.7, pch=16, main="scatterplot3d - 5")
  #Now adding some points to the "scatterplot3d"
 s3d$points3d(seq(10,20,2), seq(85,60,-5), seq(60,10,-10),col="blue", type="h", pch=16)
  #Now adding a regression plane to the "scatterplot3d"
 attach(trees)
 my.lm <- lm(Volume ~ Girth + Height)
 s3d$plane3d(my.lm, lty.box = "solid")
代码语言:javascript
复制
s3d$plane3d(my.lm, lty.box ="solid",col="green")

再高级点还可以直接设置平面的填充颜色:

代码语言:javascript
复制
s3d$plane3d(my.lm, lty.box ="solid",col="green",draw_polygon = T)

并且能够修改平面的颜色:

当然,拟合的平面的颜色也是可以进行修改的:需要在s3d$plane3d子函数中进行设置;至此基本的此包的所有功能基本掌握。其他的美观度那就需要自己去体会了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言交流中心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档