R_3D图(三)

浏览: 1704

作者:李誉辉  

四川大学在读研究生 

前言

这篇是plot3D包绘图系列之三,前一篇请戳:R_3D图(二),这一章节主要聚焦三维图的制作。做教程狠费精力的,别忘了点赞和转发。谢谢。

3三维图(3-D perspectives)

  • persp3D() 是persp()函数的扩展

  • ribbon3D() 与persp3D()有些类似,但不是多边形网格,而是带状的网格的曲面。

  • hist3D()产生三维的直方图。

3.1

语法

persp3D (x = seq(0, 1, length.out = nrow(z)),   
      y = seq(0, 1, length.out = ncol(z)), z, ...,  
      colvar = z, phi = 40, theta = 40,  
      col = NULL,  NAcol = "white", breaks = NULL,  
      border = NA, facets = TRUE, colkey = NULL, resfac = 1,  
      image = FALSE, contour = FALSE, panel.first = NULL,  
      clim = NULL, clab = NULL, bty = "b",  
      lighting = FALSE, shade = NA, ltheta = -135, lphi = 0,  
      inttype = 1, curtain = FALSE, add = FALSE, plot = TRUE)  

ribbon3D (x = seq(0, 1, length.out = nrow(z)),  
     y = seq(0, 1, length.out = ncol(z)), z, ...,  
     colvar = z, phi = 40, theta = 40,  
     col = NULL,  NAcol = "white", breaks = NULL,  
     border = NA, facets = TRUE, colkey = NULL, resfac = 1,  
     image = FALSE, contour = FALSE, panel.first = NULL,  
     clim = NULL, clab = NULL, bty = "b",  
     lighting = FALSE, shade = NA, ltheta = -135, lphi = 0,  
     space = 0.4, along = "x",  
     curtain = FALSE, add = FALSE, plot = TRUE)  

hist3D (x = seq(0, 1, length.out = nrow(z)),  
     y = seq(0, 1, length.out = ncol(z)), z, ...,    
     colvar = z, phi = 40, theta = 40,  
     col = NULL, NAcol = "white", breaks = NULL,  
     border = NA, facets = TRUE, colkey = NULL,  
     image = FALSE, contour = FALSE,  
     panel.first = NULL, clim = NULL, clab = NULL, bty = "b",  
     lighting = FALSE, shade = NA, ltheta = -135, lphi = 0,  
     space = 0, opaque.top = FALSE, zmin = NULL,  
     add = FALSE, plot = TRUE)    

参数解释:

  • z, 为二维矩阵数据,用于绘制3D透视图。

  • x, y ,可以是2个向量,也可以是1个矩阵,
    如果是向量,则x的长度必须等于z的行数,y的长度必须等于z的列数。
    如果是矩阵(只用于persp3D), xy的维度应该与矩阵z相同。

  • colvar,指定着色的变量,如果给出,则必须与矩阵z维度相同。
    如果是NULL,NA,或FALSE将根据colvar切换颜色,
    仅当boder参数被指定颜色,shade参数>0,或lighting = TRUE才会产生好的效果。

  • col, 表示指定颜色色板,用于colvar颜色,
    如果col = NULL, 且colvar指定了,则默认“红-黄-蓝”色板。
    如果col = NULL, 且colvar指定,则col默认为grey灰度板。
    为了与透视图相符,设定colvar = NULL, 使col为一个矩阵,其维度为nrow(z)-1行,ncol(z)-1列。

  • NAcol, 表示指定colvar中缺失值的颜色,默认为白色。

  • breaks, 为数字向量,表示colvar断点,默认增序排列,无序向量会被自动排序。

  • colkey, 为逻辑值或NULL(默认)或列表。表示指定图例参数。

  • add, 为逻辑值,表示是否将该绘图对象添加到现有的绘图对象中,默认FALSE新建图层,TRUE则添加图层。

  • plot, 为逻辑值, 表示是否绘图,默认TRUE则绘图,FALSE则返回视角转换矩阵。

  • clab, 表示指定图例标题内容。colkey=TRUE生效。

  • clim, 表示指定图例显示范围,当colvar指定时生效,clim范围超出colvar则超出部分显示NA。

  • resfac, 表示指定x和y的分辨率因子,长度为1或2的数字向量指定,
    数字大于1,则增加分辨率,通过插值z增加。
    若向量长度为1,则在x和y对应的z插值数量相同。

  • theta, phi, 表示指定观察透视图的方向,与persp()中一致。

  • border, 表示指定曲面网格边线的颜色,默认NA不显示曲面网格边线。

  • facets, 为逻辑值或NA,表示是否指定曲面网格的颜色,TRUE则用col参数指定曲面网格的颜色,
    FALSE则为网格为颜色为白色且网格边线为col指定的颜色(前提是border=NA)。

  • image, 为逻辑值,表示是否在绘图立方体插入另一个图,
    如果TRUE,则会底部绘制图像,还允许传递image2D()函数的参数的列表,
    此列表的一个参数side表示将image2D()图置于何处位置。
    side = z-value, 表示将该图置于z轴value值位置处。
    side = "zmin"side = "zmax"分别将该图置于底部和顶部,默认置于底部。

  • contour, 为逻辑值,表示是否在绘图立方体中插入等高线, 如果TRUE, 则默认插入等高线图在底部,也可以通过contour()函数传递参数。
    同样存在位置参数sideside = "zmin"side = "zmax"分别将该图置于底部和顶部,默认置于底部。

  • panel.first, 表示指定一种变换函数,常常用于绘制背景网格和三维散点图的平滑处理。 该函数的其中一个参数应该是pmat矩阵变换。

  • along, 表示指定绘制ribbons图的方向,c(“x”, “y”, “xy”)其中之一,表示ribbons平行x轴,y轴或xy平面。

  • curtain, 为逻辑值,TRUE表示ribbon或persp将紧挨着panels。

  • space, 为数值,表示指定bar/ribbons之间的空白间隙量,
    对应hist3D(), 则介于[0, 0.9]之间。对于ribbon3D(), 则介于[0.1, 0.9]之间。
    也可以是2个长度的向量,分别表示x,y方向的空白间隙量。

  • bty, 表示指定box类型, 默认仅仅画背景panels, 只有当persp()中的box=TRUE时才有效。
    其它与perspbox() 函数中一致。bty = c(“b”, “b2”, “f”, “g”, “bl”, “bl2”, “u”, “n”)其中之一。

  • lighting, 逻辑值或列表指定,表示对曲面网格打光,
    FALSE则不打光,TRUE或list指定都会打光,则网格颜色可能变明亮,
    list必须用下面的颜色空间指定:
    ambient环境光, diffuse漫反射, specular镜面反射, exponent颜色数字, sr阳光反射指数, alpha透明度,

  • shade, 表示指定阴影指数,与persp()中一样。

  • ltheta, lphi, 表示指定打光方向,与persp()中一样。

  • inttype, 表示指定多边形网格的插值类型,每个网格的显示由4个角点的坐标和1个颜色决定,共3种插值类型:
    inttype = 1(默认)与persp()曲面一致,z值表示每个网格4个角点的z轴坐标。
    如果指定了colvar参数,则将其colvar值重新计算到每个网格的中间,所以colvar维度必须是(nx-1)(ny-1),
    且平均值取自源数据(nx和ny分别是x和y点的数量), 这将使颜色分布和阴影过渡更加平滑。
    inttype = 1时,colvar中的NA值将在均值计算期间被使用,这将使NA对应的网格区域变大。
    inttype = 3为另一种设置,除了NA值的处理不一样,
    其它跟inttype = 1一致,NA不会带入平均值计算过程中,这样会使NA对应的网格区域变小。
    inttype = 2设置表示另一种插值方法,当colvar参数被指定的时候,这种设置使用得很频繁。
    这种插值方法中,颜色过渡不会平滑处理。它假定z的值和colvar的值都定义在网格的中心的位置,
    为了对网格作色,x,y,z对应的panels将扩大。grid数量增大到(nx+1)*(ny+1)。
    当colvar被指定时,这将使曲面上的z数据比源数据过渡更加平滑。
    这种插值更加适用于颜色变量colvar存在NA值的情况,因为取平均值过程会增加NA对应的网格区域。

  • opaque.top, 为逻辑值,表示3D直方图中(设置alpha透明),bars顶面是否透明,TRUE则不透明,
    默认FALSE表示透明。

  • zmin, 表示3D直方图中,设置bars的底面位置,默认NULL表示底面将处在zmin位置上。

  • …, 其它绘图参数,与persp()函数中参数一致。包括:xlim, ylim, zlim, xlab, ylab, zlab,
    main, sub, r, d, scale, expand, box, axes, nticks, ticktype。
    还有perspbox()中一些参数:col.axis, col.panel,
    lwd.panel, col.grid, lwd,grid。
    还有公共参数: alpha设定绘图对象的透明度(从0到1),
    lty, lwd分别设置网格边线的线型和线宽(仅当border 不是NA)

  • 注意:xlim, ylim, zlim仅仅表示设定坐标轴的显示范围,
    超出xlim,ylim, zlim范围的图形对象也会被绘制出来。
    如果要设定绘制图形对象的范围,使用plotdev()函数。

3.2

 persp3D()

比较persp3Dpersp函数的参数:

persp3D (x = seq(0, 1, length.out = nrow(z)), 
      y = seq(0, 1, length.out = ncol(z)), z, ...,
      colvar = z, phi = 40, theta = 40,
      col = NULL,  NAcol = "white", breaks = NULL,
      border = NA, facets = TRUE, colkey = NULL, resfac = 1,
      image = FALSE, contour = FALSE, panel.first = NULL,
      clim = NULL, clab = NULL, bty = "b",
      lighting = FALSE, shade = NA, ltheta = -135, lphi = 0,
      inttype = 1, curtain = FALSE, add = FALSE, plot = TRUE)

persp(x = seq(0, 1, length.out = nrow(z)),
     y = seq(0, 1, length.out = ncol(z)),
     z, xlim = range(x), ylim = range(y),
     zlim = range(z, na.rm = TRUE),
     xlab = NULL, ylab = NULL, zlab = NULL,
     main = NULL, sub = NULL,
     theta = 0, phi = 15, r = sqrt(3), d = 1,
     scale = TRUE, expand = 1,
     col = "white", border = NULL, ltheta = -135, lphi = 0,
     shade = NA, box = TRUE, axes = TRUE, nticks = 5,
     ticktype = "simple", ...)

参数比较结果:

  • persp3D中的xlim, ylim, zlim, 不一样,仅仅用于指定坐标轴的显示范围,
    persp中需要覆盖住图形的范围。

  • persp3D中增加了颜色标度断点参数breaks, 以进行着色。

  • persp3D中增加了参数facets参数,表示是否显示网格面,可以不显示网格面,只显示网格线。

  • persp3D中增加了颜色参数和图例参数: colvarNAcolcolkey

  • persp3D中增加了lighting参数(是否打光,打光类型),而persp中只有shade参数。

  • persp3D中增加了imagecontour参数,可以插入一个平面图。

  • persp3D中增加了resfac 参数,表示指定各个方向的分辨率因子。

  • persp3D中增加了inttype 参数,表示可以设置网格插值类型。

  • persp3D中增加了curtain 参数, 表示是否紧挨着panels。

  • persp3D中增加了图例相关的参数: clab图例标题内容, clim图例显示范围,能自动添加图例。

3.2.1 breaks参数及列表传参

persp3D(z = volcano, contour = list(side = "z", dDepth = 0.))设定等高线深度。

library(plot3D)

# 设定主标题,图例标题, 设定标度断点以着色, 默认scale = TRUE表示3个坐标轴独立缩放
persp3D(z = volcano, main = "volcano", clab = c("height", "m"),
 breaks = seq(80,200, by = 10)) # 设置颜色标度断点


# expand参数z轴方向缩放,expand<1缩小,使用列表传递图例参数
persp3D(z = volcano, x = 1: nrow(volcano), y = 1:ncol(volcano), # x, y比默认的数值大
     expand = 0.3, main = "volcano", facets = FALSE, scale = FALSE, # scale = FALSE表示x,y比例不变
     clab = "height, m", colkey = list(side = 1, length = 0.5)) # 图例参数:side=1底部,图例箱体缩短

3.2.2 facets参数和curtain参数

with函数参考用法1

http://trefoil.github.io/2013/10/15/rwithby.html
with函数参考用法2

https://zhuanlan.zhihu.com/p/25847796

library(plot3D)

x <- seq(-pi, pi, by = 0.2)
y <- seq(-pi, pi, by = 0.3)
grid <- mesh(x, y)  # mesh函数创建一个2维或3维的grid绘图对象

z <- with(grid, cos(x) * sin(y))  # 返回1个矩阵对象,值为cos(x) * sin(y)

# 默认绘图
persp3D(z = z, x = x, y = y)

# facets=FALSE,不显示网格面,只显示网格线,curtain =
# TRUE表示图形外轮廓与box贴紧。
persp3D(z = z, x = x, y = y, facets = FALSE, curtain = TRUE)

3.2.3 contour和image参数(插入平面图)

library(plot3D)

x <- seq(1, nrow(volcano), by = 3)
y <- seq(1, ncol(volcano), by = 3)
Volcano <- volcano[x, y] # 抽取volcano中x行,y列对应的元素赋予Volcano,约抽取了1/3的数据

# 插入等高线平面图,默认在zmin处插入,设定z轴显示范围
persp3D(z = Volcano, contour = TRUE, zlim= c(-200, 200), image = FALSE)


# 插入平面等高线图,插入等高线背景图,列表传参
persp3D(z = Volcano, x = x, y = y, scale = FALSE,  # scale=FALSE表示x,y比例不变
       contour = list(nlevels = 20, col = "blue"), # 设定等高线颜色为蓝色
       zlim = c(-200, 200), expand = 0.2, # 设定z轴显示范围,expand = 0.2 表示z轴图形压缩
       image = list(col = alpha.col(col = "magenta", # 给等高线图添加背景,col深浅与z轴相关
                                    alpha = seq(from = 0, to = 1, len = 100)))) #  

# 等高线同时插入到多个位置,自定义平面图位置,使用side参数,
persp3D(z = Volcano, contour = list(side = c("zmin", "z", "350")), # 等高线插入3个位置,
      zlim = c(-100, 400), phi = 20, image = list(side = 350)) # 图太多了,拓展z轴范围

3.2.4 inttype和colvar参数

colvar颜色参数为与z维度一致的矩阵, 指定colvar参数后,图例就表现colvar值了,不在是z的值了。

library(plot3D)

# 默认inttype = 1
persp3D(z = Volcano, shade = 0.5, colkey = FALSE)

# 设定inttype = 2, 在colvar存在NA(默认Z存在NA时)时,更准确
persp3D(z = Volcano, inttype = 2, shade = 0.5, colkey = FALSE)

# 设定colvar参数

## 创建数据
x <- y <- seq(0, 2 * pi, length.out = 10)
z <- with(mesh(x, y), cos(x) * sin(y)) + runif(100)  # runif生成100个随机分布随机数
cv <- matrix(0.5 * runif(100), nrow = 10)  # 生成10*10矩阵

## 绘图,colvar指定随机颜色矩阵, 图例展示colvar值了
persp3D(x, y, z, colvar = cv)  #
persp3D(x, y, z, colvar = cv, inttype = 2)  # inttype=2能更好的展示colvar变量的分布

3.2.5 inttype参数影响缺失值变化

library(plot3D)

par(mfrow = c(2, 2))

# 创建数据
VV <- V2 <- volcano[10:15, 10:15] # 筛选地10到15行,10到15列的元素,6*6矩阵,并赋值给2个对象
V2[3:4, 3:4] <- NA # 更新矩阵元素,3到4行,3到4列更改为缺失值
V2[4, 5] <- NA # 4行5列对应元素更改为缺失值

# 二维网格图,展示colvar矩阵中NA缺失值分布
image2D(V2, border = "black")  # x对应矩阵的行,y对应矩阵的列

# inttype = 1插值后,z的维度减少1行1列,变成了5*5矩阵
persp3D(z = VV, colvar = V2, inttype = 1, theta = 0, # inttype = 1插值后,缺失值增加,变成8个
       phi = 20, border = "black", main = "inttype = 1") # 添加主标题

# inttype = 2插值后,z的维度不变,缺失值数量及分布不变。
persp3D(z = VV, colvar = V2, inttype = 2, theta = 0, # inttype =2插值后,缺失值数量及分布不变
       phi = 20, border = "black", main = "inttype = 2") # 添加主标题

# inttype = 3插值后,z的维度减少1行1列,但colvar缺失值减少
persp3D(z = VV, colvar = V2, inttype = 3, theta = 0,  # inttype = 3插值后,缺失值减少,变成1个
       phi = 20, border = "black", main = "inttype = 3") # 添加主标题

3.2.6 panel.first及函数传参

panel.first参数用于指定box的panels类型,也可以使用函数在panels上添加绘制的图形对象。

library(plot3D)

par(mfrow = c(1, 1))

# 构建一个包含绘图对象的函数,在后面panel.first参数中调用  
panelfirst <- function(trans) {
   zticks <- seq(100, 180, by = 20) # 5个长度的向量
   len <- length(zticks) # len = 5

   # 用trans3D新建2个空间转化矩阵
   XY0 <- trans3D(x = rep(1, len), y = rep(1, len), z = zticks, # trans3D函数与trans3d作用一样,
                  pmat = trans)
   XY1 <- trans3D(x = rep(1, len), y = rep(61, len), z = zticks,
                  pmat = trans)

   # 绘制第1个平面图,绘制几条虚线
   segments(XY0$x, XY0$y, XY1$x, XY1$y, lty = 2) # R自带函数segments绘制虚线


   rm <- rowMeans(volcano) # 在z中列为y, 行为x          
   XY <- trans3D(x = 1:87, y = rep(ncol(volcano), 87),
                 z = rm, pmat = trans)

   # 绘制第2个平面图,绘制1条曲线
   lines(XY, col = "green", lwd = 2)
}

# 绘图,设置panel.first参数,绘制panels中的图形, 将persp3D产生的空间转化矩阵代入panelfirst的trans
# panels添加顺序安装绘制顺序
persp3D(z = volcano, x = 1:87, y = 1: 61, scale = FALSE, theta = 10,
       expand = 0.2, panel.first = panelfirst, colkey = FALSE)

3.2.7 col参数指定色板

library(plot3D)

# 设定col为gg.col色板(ggplot2默认色板)
persp3D(z = volcano, shade = 0.3, col = gg.col(100))  # 不指定colvar参数时,颜色与z坐标匹配  

# lighting参数指定打光,光照类型还没搞懂怎样设置
persp3D(z = volcano, lighting = TRUE, lphi = 90)

# 自定义连续渐变色板
persp3D(z = volcano, shade = 0.3, col = ramp.col(col = c("cyan", "magenta"),
   n = 102, alpha = 0.5))

# 设置颜色全部为灰蓝色,
persp3D(z = volcano, col = "lightblue", shade = 0.3, bty = "b2")

persp3D(z = volcano, col = "grey", shade = 0.3)

3.2.8 add参数添加图层

最后一个图层才设定plot = TRUE

library(plot3D)

clim <- range(volcano)

# 绘制第一个图层,
persp3D(z = volcano, zlim = c(100, 600), clim = clim,
       col = ramp.col(col = c("cyan", "magenta"), n = 102, alpha = 1),# clim 指定图例显示范围
       box = FALSE, plot = FALSE)

# 绘制第2个图层,向z轴正向偏移200个单位, volcano设定等于原来的z轴
persp3D(z = volcano + 200, clim = clim, colvar = volcano,
       col = ramp.col(col = c("cyan", "magenta"), n = 102, alpha = 1), #
       add = TRUE, colkey = FALSE, plot = FALSE)

# 绘制第3个图层,向z轴正向偏移400个单位
persp3D(z = volcano + 400, clim = clim, colvar = volcano,
       col = ramp.col(col = c("cyan", "magenta"), n = 102, alpha = 1),
       add = TRUE, colkey = FALSE)    # 默认plot = TRUE

3.3

ribbon3D()

ribbon3D()persp3D()比较:
* z与persp3D()中的数据不同,为了不形成封闭的网格,必须对volcano数据集进行筛选行或筛选列。
* 通过设定along参数指定方向条带方向,默认along = x。 * 增加了space参数,设定条带之间的空白间隙量。默认space = 0.4。

3.3.1 筛选数据集和along参数

  • volcano数据集列相当于y, 行相当于x。

  • 筛选列,y不连续, 条带沿x方向。默认along = "x"

  • 筛选行,x不连续, 条带沿y方向。设定along = "y"

  • 不筛选数据,则设定along = "xy", 结果形成网状条带。

library(plot3D)

# 默认条带沿x方向
V <- volcano[, seq(1, ncol(volcano), by = 3)]  ## 筛选数据集,筛选列,间隔2个列取1列数据
ribbon3D(z = V,
         col = ramp.col(col = c("cyan", "magenta"), n = 102, alpha = 1),
         colkey = list(width = 0.5, length = 0.5,  # 列表传递图例参数
                              cex.axis = 0.8, side = 2), clab = "m") # cex.axis坐标轴比例变为0.8倍

# 设定along = "y", 条带沿y方向, space = 0.3减小条带间隙
Vy <- volcano[seq(1, nrow(volcano), by = 3), ] ## 筛选数据集,筛选行,间隔2个行取1行数据
ribbon3D(z = Vy, expand = 0.3, space = 0.3, along = "y", # expand = 0.3,沿z轴压缩
         col = ramp.col(col = c("cyan", "magenta"), n = 102, alpha = 1),
         colkey = list(width = 0.5, length = 0.5, cex.axis = 0.8))

# 不筛选数据,设定along = "xy", 形成网状条带。
x <- seq(-pi, pi, by = 0.2)
y <- seq(-pi, pi, by = 0.3)
grid <- mesh(x, y)
z <- with(grid, cos(x) * sin(y))

ribbon3D(z = z, x = x, y = y, along = "xy", space = 0.3,
        col = ramp.col(col = c("cyan", "magenta"), n = 102, alpha = 1))

3.3.2 contour和image参数增加平面图

library(plot3D)

x <- seq(1, nrow(volcano), by = 3)  # 同时筛选数据
y <- seq(1, ncol(volcano), by = 3)

Volcano <- volcano[x, y]
ribbon3D(z = Volcano, zlim = c(-100, 200), col = ramp.col(col = c("cyan", "magenta"),
   n = 102, alpha = 1), contour = TRUE, image = TRUE)  # 默认image图形颜色与条带一致

3.4

hist3D()

hist3D()特点:

  • 同样有space参数,但默认space = 0。

  • 增加了一个opaque.top参数,用于指定bar顶面是否透明(当设定alpha时),默认opaque.top = FALSE不透明。

require(plot3D)

data(VADeaths) # 一个城市与农村不同年龄,不同性别人口数量数据集,
head(VADeaths) # 行相当于x即年龄分布。

# bty = "g"表示灰色背景panels和白色grid
hist3D(z = VADeaths,
      scale = FALSE, expand = 0.01, bty = "g", theta = 290, phi = 20, # expand = 0.01,z轴方向压缩
       col = "green", border = "magenta", shade = 0.2, ltheta = -290,
       space = 0.3, ticktype = "detailed", d = 2) # 设定柱子间隙为0.3, d=2>1降低透视强度

3.4.1 增加3维文字text3D()

library(plot3D)

hist3D (x = 1:5, y = 1:4, z = VADeaths,
       bty = "g", phi = 20,  theta = -60,
       xlab = NA, ylab = NA, zlab = "", main = "VADeaths", # main增加主标题
       col = "green", border = "magenta", shade = 0.8,
       ticktype = "detailed", space = 0.15, d = 2)

# 添加3维文字,给x轴增加刻度标签
text3D(x = 1:5, y = rep(-0.3, 5), z = rep(3, 5), # y相同,在x轴上增加刻度标签
      labels = rownames(VADeaths),
      add = TRUE, adj = 0)

# 添加3维文字,给y轴增加刻度标签
text3D(x = rep(0.5, 4),   y = 1:4, z = rep(0, 4), # x相同
      labels  = colnames(VADeaths),
      add = TRUE, adj = 1)

3.4.2 opaque.top设定顶面非透明

必须用alpha参数设定bar透明度
alpha从0(全透明)到1(不透明)。

library(plot3D)

data(VADeaths) # 一个城市与农村不同年龄,不同性别人口数量数据集,
head(VADeaths) # 行相当于x即年龄分布。

# 设定图形透明度为0.3, opaque.top = TRUE表示顶部不透明
hist3D(z = VADeaths,
      scale = FALSE, expand = 0.01, bty = "g", theta = 290, phi = 20, # expand = 0.01,z轴方向压缩
       col = "green", border = "magenta", shade = 0.2, ltheta = -290, alpha = 0.3, opaque.top = TRUE,
       space = 0.3, ticktype = "detailed", d = 2) # 设定柱子间隙为0.3, d=2>1降低透视强度

····

往期精彩:

····

公众号后台回复关键字即可学习

回复 爬虫            爬虫三大案例实战  
回复 Python       1小时破冰入门

回复 数据挖掘     R语言入门及数据挖掘
回复 人工智能     三个月入门人工智能
回复 数据分析师  数据分析师成长之路 
回复 机器学习      机器学习的商业应用
回复 数据科学      数据科学实战
回复 常用算法      常用数据挖掘算法

推荐 0
本文由 R语言中文社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册