专业编程基础技术教程

网站首页 > 基础教程 正文

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

ccvgpt 2024-10-12 15:01:15 基础教程 6 ℃

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

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

在学习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中的实现过程,并没有特意追求美观,故很多图的细节部分修饰有限,大家重点理解实现过程。

最近发表
标签列表