2、如果是结构体变量,还可以获取到结构体本身的信息(包括结构体的字段、方法);
3、通过反射,可以修改 变量的值 ,可以调用关联的方法;
4、使用反射,需要import " reflect ".
5、示意图:
1、不知道接口调用哪个函数,根据传入参数在运行时确定调用的具体接口,这种需要对函数或方法反射。
例如以下这种桥接模式:
示例第一个参数funcPtr以接口的形式传入函数指针,函数参数args以可变参数的形式传入,bridge函数中可以用反射来动态执行funcPtr函数。
1、reflect.TypeOf(变量名),获取变量的类型,返回reflect.Type类型。
2、reflect.ValueOf(变量名),获取变量的值,返回reflect.Value类型reflect.Value是一个结构体类型。
3、变量、interface{}和reflect.Value是可以互相转换的,这点在实际开发中,会经常使用到。
1、reflect.Value.Kind,获取变量的 类别(Kind) ,返回的是一个 常量 。在go语言文档中:
示例如下所示:
输出如下:
Kind的范畴要比Type大。比如有Student和Consumer两个结构体,他们的 Type 分别是 Student 和 Consumer ,但是它们的 Kind 都是 struct 。
2、Type是类型,Kind是类别,Type和Kind可能是相同的,也可能是不同的。
3、通过反射可以在让 变量 在 interface{} 和 Reflect.Value 之间相互转换,这点在前面画过示意图。
4、使用反射的方式来获取变量的值(并返回对应的类型),要求数据类型匹配,比如x是int,那么久应该使用reflect.Value(x).Int(),而不能使用其它的,否则报panic。
如果是x是float类型的话,也是要用reflect.Value(x).Float()。但是如果是struct类型的话,由于type并不确定,所以没有相应的方法,只能 断言。
5、通过反射的来修改变量,注意当使用SetXxx方法来设置需要通过对应的指针类型来完成,这样才能改变传入的变量的值,同时需要使用到reflect.Value.Elem()方法。
输出num=20,即成功使用反射来修改传进来变量的值。
6、reflect.Value.Elem()应该如何理解?
气泡图(Bubble Plot)就是由一个个像气泡元素组成的图,和普通的散点图不同,该图可以展示三维甚至四维信息,如下图: 点的位置即其横纵坐标分别代表了Weight和Height,气泡的大小代表了Age,颜色代表了不同个体。
再举几个例子:
上面用了不同形式展示了GO或其他富集的结果。上图和右下图中,我们用颜色代表GO的类别,用横纵坐标代表p-value和z-score,用大小代表富集的基因Count。左下图我们用颜色代表p-value,用大小代表GeneCount,横坐标代表GeneRatio,纵坐标代表具体的类别。
从上述例子中可以发现用气泡图我们能展示更多的数据信息。 随着多组学研究的涌现,我们急需在同一张图表理展现多维的数据,气泡图就是一个不错的选择。
1)需要什么格式的数据
根据最终想要在气泡图上展示数据的维度以确定数据的格式。
本次用一个来自于GOplo包的数据EC,该数据为RNA-seq的下游分析数据。
该数据标准化处理后进行统计分析以确定了差异表达基因。 使用DAVID功能注释工具对差异表达基因(调整后的p值<0.05)进行基因注释富集分析。
由于本次将使用两个包一个是GOplot专门用于转录组数据的下游展示,还有一个是我们常用的画图包ggplot2, 需要注意的是用于ggplot2的作图数据还要基于circ略作修改,具体见下文。
2)如何作图
GOplot 包提供了直接做气泡图的方法:
略调整参数之后可以对图的布局、颜色等进行调整:
然后,我们来看一看用常见的包ggplot2应该如何做该图。
首先我们要对数据处理一下,剔除一些不必要的信息:
稍作改变,去除图例添加facet。
往期 R数据可视化 分享
R数据可视化6: 面积图 Area Chart
R数据可视化5: 热图 Heatmap
R数据可视化4: PCA和PCoA图
R数据可视化3: 直方/条形图
R数据可视化2: 箱形图 Boxplot
R数据可视化1: 火山图