大部分情况下,我们使用二维的图像就足以展示我们的数据,但是也无法排出在一些特定的情况下,需要将数据在三维空间进行展示。
今天给大家介绍两个用来绘制三维散点图的R包。
rgl包
首先介绍的是rgl包的plot3d()函数。
还是先来看一下这个函数的参数。
plot3d(x, y, z,
xlab, ylab, zlab, type = "p", col,
size, lwd, radius,
add = FALSE, aspect = !add,
xlim = NULL, ylim = NULL, zlim = NULL,
forceClipregion = FALSE, ...)
各参数意义:
x、y、z为绘制3D图3个坐标的向量;
xlab、ylab和zlab为x、y、z轴的标签;
type,p为点图、s为球面图、l为线图、h为透视线图;
col绘图应用的颜色;
size点的大小;
lwd线的宽度;
radius球的半径;
add是否向现存的图中添加数据;
aspect规定是否要调整图像中立体的显示比例;
xlim、ylim和zlim为3个轴的最大值。
接下来我们简单的绘制一个3D的散点图。
install.packages("rgl")library(rgl)
data(mtcars)
plot3d(mtcars$mpg,mtcars$hp,mtcars$wt,col = "red",size = 3)
运行完次命令之后,会自动打开一个窗口,生成一个可交互的3D散点图。
scatterplot3d包
scatterplot3d是一个专门用与绘制3D散点图的R包,其主要函数极为scatterplot3d()函数,还是先介绍该函数的参数。
scatterplot3d(x, y=NULL, z=NULL, color=par("col"), pch=par("pch"),
main=NULL, sub=NULL, xlim=NULL, ylim=NULL, zlim=NULL,
xlab=NULL, ylab=NULL, zlab=NULL, scale.y=1, angle=40,
axis=TRUE, tick.marks=TRUE, label.tick.marks=TRUE,
x.ticklabs=NULL, y.ticklabs=NULL, z.ticklabs=NULL,
y.margin.add=0, grid=TRUE, box=TRUE, lab=par("lab"),
lab.z=mean(lab[1:2]), type="p", highlight.3d=FALSE,
mar=c(5,3,4,3)+0.1, bg=par("bg"), col.axis=par("col.axis"),
col.grid="grey", col.lab=par("col.lab"),
cex.symbols=par("cex"), cex.axis=0.8 * par("cex.axis"),
cex.lab=par("cex.lab"), font.axis=par("font.axis"),
font.lab=par("font.lab"), lty.axis=par("lty"),
lty.grid=par("lty"), lty.hide=NULL, lty.hplot=par("lty"),
log="", ...)
各参数意义:
x、y、z为绘图的3个向量;
color绘制图像的颜色;
pch绘图中点的形状标签;
main为主标题;
sub为副标题;
xlim、ylim和zlim为3条轴的最大值;
xlab、ylab和zlab为3条轴的标签;
scale.y为y轴相对于x和z轴的比例;
angle为x和y轴之间的角度;
axis定义是否要绘出轴;
tick.marks定义是否绘制轴中坐标的间隔;
label.tick.marks定义是否绘出轴坐标间隔的标签;
x.ticklabs、y.ticklabs和z.ticklabs为3条轴坐标间隔的向量;
y.margin.add为y轴坐标轴标签与坐标间隔标签的间距;
grid是否绘制网格;
box是否绘制边框;
lab给出x和y轴坐标间隔的数量;
lab.z给出z轴坐标间隔的数量;
type定义图像的类型,p为点图、s为球面图、l为线图、h为透视线图;
highlight.3d定义是否要按照y的坐标给予图像中的点不同的颜色;
mar定义图像边界;
bg为背景颜色;
col.axis、col.grid和col.lab为轴、网格和标签的颜色;
cex.symbols、cex.axis和cex.lab为图标、轴和标签的大小;
font.axis和font.lab为轴和标签的字号;
lty.axis、lty.grid为轴和网格的线型。
接下来同样先绘制一个简单的3d散点图。
install.packages("scatterplot3d")library(scatterplot3d)
data(mtcars)
scatterplot3d(mtcars$mpg,mtcars$hp,mtcars$wt)
在很多时候我们可能无法直接的看出散点的空间分布,因此可以添加一条垂线,将三点映射到x和y轴平面上。
scatterplot3d(mtcars$mpg,mtcars$hp,mtcars$wt,pch=16,
highlight.3d=TRUE, type="h")
本推文只是简单的介绍了这两个R包,具体的图像绘制大家可以根据推文中给出的绘图参数自行调整优化。
我就知道你在看?