查看原文
其他

【孙老湿画图系列--第八弹】 R中绘图顺序不是自己想要的怎么办?

博文 生信者言 2022-03-29


 

R中绘图顺序不是自己想要的怎么办?今天就给大家介绍个利器factor(因子)。


在学习factor之前,先了解一下什么是DataFrame

小板报

DataFrame一般译为数据框,由行和列组成,是一个表格或者类似二维数组的结构,它的各行表示一个实例,各列表示一个变量。


与Matrix不同的是,每个列可以是不同的数据类型,而Matrix是必须相同的。DataFrame每一列有列名,每一行也可以指定行名。如果不指定行名,那么就是从1开始自增的Sequence来标识每一行。


一般我们绘图都是读取自己的数据,所以可以通过读取外部的数据创建一个dataframe。


可以通过read.table(一般是tab分割或者空格分割)或者read.csv(逗号分隔的csv文件)读取文件,比如我们读取一个tab分隔的txt文件:

dat <- read.table(“yourfile.txt”, header = Ttue, sep = "\t", row.names = 1) header  #指定是否第一行作为表头sep   #制定分隔方式,如果是tab分隔sep=”\t”row.names   #指定那一列为行名,没有则不用指定 我们利用R的内置数据iris,查看一下其结构:head(iris)

 

如果我们要用Sepal.Length, Sepal.Width两列数据画图,并且Species是分组变量:

 

p <- ggplot(iris, aes(Sepal.Length, Sepal.Width, col =Species)) +

    geom_point() +

    theme_bw() +

    theme(axis.title =element_text(size = 16),

          axis.text =element_text(size = 14))

p

 


但是图例的现实顺序不是我们想要的,我们想按照versicolor, virginica, setosa这个顺序显示,怎么办呢?


首先我们levels()函数查看Species变量是按照setosa, versicolor, virginica方式排序的,那怎么才能按照我们的方式排序呢?这就不得不提R中强大的因子factor了:



变量一般可归结为类别型,有序型,连续型变量。类别型变量和有序型类别变量在R中称为因子(factor)它是一个离散值,可以用数值代表也可以是字符型值,其具体数值没有加减乘除等运算的意义,不能用来计算而只能用来分类或者计数。类别型变量比如性别、省份、职业,有序型变量比如班级名次等等。


函数factor()以一个整数向量的形式存储类别值,整数的取值范围是[1…k](其中k是类别型变量中唯一值的个数),同时一个字符串(原始值)组成的内部向量将映射到这些整数上。

 

比如我定义一个类别形的向量var,并把它因子化(大家可以看一下红色方框内,是去掉了重复值之后的因子):


因子函数主要有几个参数:

factor(x, levels, ordered)

x          #需要因子化的向量

levels   #指定因子水平,注意这个顺序决定了你画图的顺序

ordered          #指定因子变量是否有序,通常用在有序型类别变量上


下面我们随便生成一个向量var:

var <- c("A", "A", "B","B", "C", "C")

var

var <- factor(var)

var

 

var <- factor(var, levels = c("B", "A","C"))  #指定顺序

var



大家是否发现,levels的顺序已经改变了。

 

如果大家是有序型类别变量,可以指定ordered = TRUE,当然这在画图的时候不影响,如果要做统计分析的话,有时候需要指定。

 

好了,接下来我们还是用之前的iris数据,按照我们指定的因子顺序画图:

 

iris$Species <- factor(iris$Species, levels =c("versicolor", "virginica","setosa"))

p <- ggplot(iris, aes(Sepal.Length, Sepal.Width, col =Species)) +

    geom_point() +

    theme_bw() +

    theme(axis.title =element_text(size = 16),

          axis.text =element_text(size = 14))

p


大家对照前面的图,是按照我们指定的顺序排列的。其他的绘图指定顺序类似。

 

本系列课程主要侧重于讲解图形原理,以及在R中的实现过程,并没有特意追求美观,故很多图的细节部分修饰有限,大家重点理解实现过程。

 

扫码关注,获取更多精彩内容

关注公众号后:


回复文字:好好学习,收听喜马拉雅FM电台栏目《一分钟听懂NGS基础概念》,让生信分析不再遥不可及。


回复文字:果然科学,给你看另一篇好玩的文章。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存