前几天在R中文社区看见的关于动态图的制作的canvasXpress包,可以说是一见钟情,这个包的优秀之处不用我多言,不用和shiny一样复杂的编码,就可以制作出相应的动态图。本人也尝试了下shiny包,发现,学起来还是在server的编码处有问题,所以,想转过头来学下这个包,不过遗憾的是并没有发现全中文的教学,比较好一点的还是’宏基因组’中刘永鑫老师在R中文社区的一篇文。总而言之,想要学习这个canvasXpress包,就要自己慢慢挖掘了。
引用刘永鑫老师的话:“CanvasXpress核心是一个Java语言编写的库,主要用于可重复 研究。在R中可以安装canvasXpress包,使用canvasXpress命令绘制各种各样的交互式图形,非常高效方便,实现如下数百种图形,令你的结果瞬间B格爆满。”
# 没有devtools也需要安装
install.packages(devtools)
library(devtools)
# 安装canvasXpress
devtools::install_github('neuhausi/canvasXpress')
library(canvasXpress)
?canvasXpress
#这个帮助文档都是参数,且没有示例
#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 还有其他的参数并没有说明...
#######vignette查看更多示例
# 显示该包中所有示例,目前有开始和额外两类
vignette(package = "canvasXpress")
# 分别展示每个示例# 初级入门教程,也是上面提到的例子
vignette( "getting_started", package = "canvasXpress")
# 额外示例,包括数据分析过程
vignette( "additional_examples", package = "canvasXpress")
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"))
#首先是数据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")
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")
)
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
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")
)