网站首页 > 基础教程 正文
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中的实现过程,并没有特意追求美观,故很多图的细节部分修饰有限,大家重点理解实现过程。
猜你喜欢
- 2024-10-12 R数据分析:倾向性评分匹配实例操作
- 2024-10-12 要为学习神经网络奠定基础,你需要认真读读R深度学习
- 2024-10-12 怎样快速入门Arduino?(二十三)—TCS3200颜色传感器
- 2024-10-12 把数据输入R之后,如何进行简单的操作(一)
- 2024-10-12 聚类分析5—物种集合-数量生态学:R语言的应用 第四章
- 2024-10-12 一文读懂R中的探索性数据分析(附R代码)
- 2024-10-12 从0开始自制解释器——添加对括号的支持
- 2024-10-12 常见编程语言:Go:Go语言函数与方法
- 2024-10-12 Python基础之变量、循环、函数(二)
- 2024-10-12 R语言中使用scan函数从键盘获取数据的方法
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)