我是canvasXpress

  前几天在R中文社区看见的关于动态图的制作的canvasXpress包,可以说是一见钟情,这个包的优秀之处不用我多言,不用和shiny一样复杂的编码,就可以制作出相应的动态图。本人也尝试了下shiny包,发现,学起来还是在server的编码处有问题,所以,想转过头来学下这个包,不过遗憾的是并没有发现全中文的教学,比较好一点的还是’宏基因组’中刘永鑫老师在R中文社区的一篇文。总而言之,想要学习这个canvasXpress包,就要自己慢慢挖掘了。

  引用刘永鑫老师的话:“CanvasXpress核心是一个Java语言编写的库,主要用于可重复 研究。在R中可以安装canvasXpress包,使用canvasXpress命令绘制各种各样的交互式图形,非常高效方便,实现如下数百种图形,令你的结果瞬间B格爆满。”

我是canvasXpress_第1张图片

1.首次安装canvaxXpress

# 没有devtools也需要安装
install.packages(devtools)
library(devtools)

# 安装canvasXpress
devtools::install_github('neuhausi/canvasXpress')
library(canvasXpress)

2.canvasXpress的帮助文件

2.1帮助文件


?canvasXpress
#这个帮助文档都是参数,且没有示例

2.2 翻译内容仅供参考

#Description
#描述

#Custom HTML widget creation function based on widget YAML and JavaScript for use in any html-compatible context
#自定义HTML控件创建函数基于Widget YAML和JavaScript中使用任何HTML兼容的环境

#Usage
#用法
#canvasXpress(data = NULL, smpAnnot = NULL, varAnnot = NULL,graphType = "Scatter2D", events = NULL, afterRender = NULL,pretty = FALSE, digits = 4, width = 600, height = 400,destroy = FALSE, ...)

#Arguments
#参数

#data    data.frame-, matrix-, or list- classed data object
#数据  数据框,矩阵,列表等

#smpAnnot    additional data that applies to samples (columns)
#适用于样本(列)的附加数据

#varAnnot   (variable annotate 变量注释)
#additional data that applies to variables (rows)
#适用于变量(行)的附加数据

#graphType  
#type of graph to be plotted - default = "Scatter2D"
#绘制图形,默认为2D散点图

#events 
#user-defined events (e.g. mousemove, mouseout, click and dblclick)
#事件,对图的不同操作,包括鼠标移动,鼠标探寻,单击和双击,这个一般不用设置


#afterRender    
#event triggered after rendering

#pretty 
#print tagged code (json/html) nicely - default = FALSE
#打印标记代码(JSON / HTML)-默认= false

#digits 
#display digits - default = 4
#小数点默认为4个

#width  
#plot width (valid CSS units) - default = 600px
#height 
#plot height (valid CSS units) - default = 400px
#图形的默认宽和长度,可以自己设置

#destroy    
#used to indicate removal of a plot - default = FALSE
#用来表示删除一个情节-默认= false

#additional parameters passed to canvasXpress 还有其他的参数并没有说明...

3.canvasXpress的示例

  canvasXpress包有一个官网,网址为 https://canvasxpress.org/html/index.html, 复制网址用浏览器打开,或者百度搜索canvasXpress,手机打开的效果可能不会太好。官网首页的图,建议大家用chrome浏览器打开,里面的翻译成中文功能,还可以将动态图中的英文翻译为中文哦!

#######vignette查看更多示例
# 显示该包中所有示例,目前有开始和额外两类
vignette(package = "canvasXpress")
# 分别展示每个示例# 初级入门教程,也是上面提到的例子
vignette( "getting_started", package = "canvasXpress")
# 额外示例,包括数据分析过程
vignette( "additional_examples", package = "canvasXpress")

4. 比对示例研究参数

  微信公众号文章不支持生成的动态的散点图,动态的结果大家可以去官网看,这里我就只截图。另外也可以到Rpubs上查看我上传的文件,点击阅读原文即可。

4.1 示例3D的散点图

  处于分析的需要,我就不运行下面的示例,大家可以自己在Rstudio中运行。

y <- read.table("http://www.canvasxpress.org/data/cX-irist-dat.txt", header=TRUE, sep="\t", 
                quote="", row.names=1, fill=TRUE, check.names=FALSE, stringsAsFactors=FALSE)
# 读取分组信息
z <- read.table("http://www.canvasxpress.org/data/cX-irist-var.txt", header=TRUE, sep= "\t", 
                quote="", row.names=1, fill=TRUE, check.names=FALSE, stringsAsFactors=FALSE)
# 绘制三维散点图,主要参数为数据、分组、分组列、置信椭圆列、图表类型以及相关标签               
canvasXpress(data      = y,
             varAnnot  = z,
             colorBy   = "Species",
             ellipseBy = "Species",
             graphType = "Scatter3D",
             title     = "Iris Data Set",
             xAxis     = list("Sepal.Length"),
             yAxis     = list("Petal.Width"),
             zAxis     = list("Petal.Length"))

4.2 示例3D的散点图的分析

#首先是数据data集y
library(data.table)
y <- read.table("http://www.canvasxpress.org/data/cX-irist-dat.txt", header=TRUE, sep="\t",quote="", row.names=1, fill=TRUE, check.names=FALSE, stringsAsFactors=FALSE)
y <- as.data.table(y)
#可以观察到y是鸢尾花数据中的数据,只是没有Sepecies的变量
y

#其次是varAnnot  = z,变量注释是z,这是分组数据
# 读取分组信息
z <- read.table("http://www.canvasxpress.org/data/cX-irist-var.txt", header=TRUE, sep= "\t", 
                quote="", row.names=1, fill=TRUE, check.names=FALSE, stringsAsFactors=FALSE)
z <- as.data.table(z)
z

#######实际上这里有个问题,不知道大家注意到没有,分组数据和面板panel上的数据是分开读取的,我们可以一会试一下,直接用鸢尾花中的数据能否成功

#颜色标度
#colorby 用字段Species 
#colorBy   = "Species"

#椭圆形ellipse 置信区间 这个就是图形中的圈圈,也是用Species  
#ellipseBy = "Species"

#其他信息就简单了
#graphType = "Scatter3D",
#title     = "Iris Data Set",
#xAxis     = list("Sepal.Length"),
#yAxis     = list("Petal.Width"),
#zAxis     = list("Petal.Length")

我是canvasXpress_第2张图片

4.3 用鸢尾花数据做图

4.3.1 普通三维散点图

  不加颜色标度

data(iris)
m_data <- t(iris[,1:3])           #矩阵转置
m_varAnnot <- as.matrix(iris[,5])        #将分组变量varannot也转为矩阵
colnames(m_varAnnot) <- "Species"        #给矩阵重新命名为Species
canvasXpress(data = t(m_data),           #然后再转置回来,只为了保持数据一致
             varAnnot = m_varAnnot,
             colorBy="Species",          #颜色标度后的变量名一定是分组变量中的变量名Species
             graphType = "Scatter3D",
             title     = "my_Iris Data Set",
             xAxis     = list("my_Sepal.Length"),
             yAxis     = list("my_Petal.Width"),
             zAxis     = list("my_Petal.Length")
             )

经过反复的实验,这里应注意这三个问题

1. data和var的数据格式问题。这个问题非常要命,如果你按照下面的编码写,m_data和m_varAnnot的格式虽然是数据框,但是实际上,data和m_varAnnot根本就匹配不到一起,这也是在官网案例中分开读取的必要性,所以这里必须保持数据的一致性。所以上面处理的时候用的是将两个数据都转为矩阵。
2. 三维散点图的x/y/z轴只能展示三个变量,如果有4个变量,那么就取前三个变量
3. 颜色标度一定要注意:colorBy=”Species”可以分出三组点,每组点不同颜色;colorBy=iris$Species和colorBy=m_varAnnot不能够分成三组,只是每个点一个颜色;不写颜色标度时,不能区分出颜色;
我是canvasXpress_第3张图片

data(iris)
m_data <- iris[,1:4]
m_varAnnot <- iris[,5]
#canvasXpress(data = t(m_data),
             #varAnnot = m_varAnnot,
             #colorBy="Species",
             #graphType = "Scatter3D",
             #title     = "my_Iris Data Set",
             #xAxis     = list("my_Sepal.Length"),
             #yAxis     = list("my_Petal.Width"),
             #zAxis     = list("my_Petal.Length"))

# Error in seq.default(length = nrow(x)) : argument 'length.out' must be of length 1

4.3.1 普通二维散点图

  在这个图中,我并没有加入分组变量varannot,所以我也不用将数据转为矩阵的格式,直接作出散点图。

canvasXpress(data = iris[,1:4],
             colorBy=iris[,5],
             graphType = "Scatter2D",
             title     = "my_Iris Data Set",
             xAxis     = list("my_Sepal.Length"),
             yAxis     = list("my_Petal.Width"),
             zAxis     = list("my_Petal.Length")
             )

我是canvasXpress_第4张图片

更多内容关注微信公众号:R语言与SPSS

我是canvasXpress_第5张图片

你可能感兴趣的:(R语言)