R语言 CHAR 01

第一章 数据与R语言


文章目录

  • 第一章 数据与R语言
  • 一、数据与统计学
    • 1.1 什么是统计学
    • 1.2 变量与数据
    • 1.3 数据来源
  • 二、R语言初步使用
    • 2.1 下载、安装、更新
    • 2.2 对象赋值与运行
    • 2.3 查看帮助文件
    • 2.4 包的安装与加载
  • 三、R语言数据处理
    • 3.1 查看R中数据
    • 3.2 创建R格式的数据
      • 向量
      • 矩阵
      • 数据框 data.frame
      • 因子
        • 将无序因子转换为数值
        • 将无序因子转换为有序因子或数值
      • 列表
    • 3.3 数据读取和保存
      • 读取外部数据
    • 3.4 随机数与数据抽样
      • 生成随机数
      • 数据抽样
    • 3.5 数据类型转换
      • 变量➡️向量
      • 数据框➡️矩阵
      • 矩阵➡️数据框
      • 短格式➡️长格式
        • 有标识变量
        • 无标识变量
      • 长格式➡️短格式
    • 3.6 生成频数表
      • 类别数据的类别化
        • 一维列联表
        • 二维列联表
        • 多维列联表
          • 将列联表转化为原始数据框
          • 将列联表转化为带有频数的数据框
      • 数值数据类别化
  • 六、R语言绘图基础
    • 6.1 基本绘图函数
    • 6.2 图形控制和页面布局
      • 6.2.1 图形参数
      • 6.2.2 页面布局
      • 6.2.3 图形颜色
  • par函数
  • layout函数

一、数据与统计学

数据分析:

  • 去哪里找所需要的数据
  • 用什么方法分析数据

1.1 什么是统计学

统计学:收集数据、处理数据、分析数据(描述统计&推理统计)

描述统计:描述统计主要是利用图表形式对数据进行汇总和展示,计算一些简单的统计量(诸如比例、比率、平均数、标准差等)进行分析
推理统计:根据样本信息来推断总体的特征.包括参数估计和假设检验两大类,参数估计是利用样本信息推断所关心的总体特征,假设检验则是利用样本信息判断对总体的某个假设是否成立

1.2 变量与数据

变量:描述所观察对象某种特征
数据:对变量的观测

类别变量:取值为对象属性或类别以及区间值
类别数据
数值变量:取值为数字的变量
数值数据

请添加图片描述

1.3 数据来源

总体➡️样本➡️样本量
概率抽样:简单随机抽样(有放回&无放回)、分层抽样、系统抽样、整群抽样

二、R语言初步使用

2.1 下载、安装、更新

  • 更新
install.packages("installr")	
library(installr)	
updateR() #更新R

2.2 对象赋值与运行

  • 赋值
x<-c(1,2,3,4,5) #将5个数据赋值给对象,5个数据合并成一个向量
y<-excel1 #将数据框赋值给对象

2.3 查看帮助文件

  • 查看帮助
help(sum) #查看sum函数信息
sum #查看sum函数源代码
help(package="包名") #查看包信息
?plotmath #查看R数学运算符

2.4 包的安装与加载

install.package("包名") #安装包
library(包名) #加载包
.package(all.avilable=TRUE) #显示已安装包的名称
remove.packages("包名") #卸载包
detach("包名") #解除包

三、R语言数据处理

3.1 查看R中数据

data(iris)
iris #查看数据

3.2 创建R格式的数据

数据及类型:向量、矩阵、数组、数据框、因子、列表

向量

# 用c函数创建向量
a<-c(2,5,8,3,9) # 数值型向量
b<-c("甲","乙","丙","丁") # 字符型向量
c<-c("TRUE","FALSE","FALSE","TRUE") # 逻辑值向量
# 创建向量其他方法
v1<-1:6 # 产生1~6的等差数列
v2<-seq(from=2,to=4,by=0.5) # 在2~4之间产生步长为0.5的等差数列
v3<-rep(1:3,times=3)  # 将1~3的向量重复3次
v4<-rep(1:3,each=3)   # 将1~3的向量中每个元素重复3次
v1;v2;v3;v4 # 运行向量v1,v2,v3,v4
[1] 1 2 3 4 5 6
[1] 2.0 2.5 3.0 3.5 4.0
[1] 1 2 3 1 2 3 1 2 3
[1] 1 1 1 2 2 2 3 3 3a<-c(2,5,8,3,9)
a[c(2,5)]
[1]5 9

请添加图片描述

矩阵

# 用matrix函数创建矩阵
a<-1:6      	# 生成1到6的数值向量
mat<-matrix(a,  # 创建向量a的矩阵nrow=2,ncol=3,    # 矩阵行数为2,列数为3byrow=TRUE)       # 按行填充矩阵的元素
# 用rownames,colnames函数添加行名和列名
rownames(mat)=c("甲","乙")    # 添加行名
colnames(mat)=c("A","B","C")   # 添加行名
# 用t函数对矩阵转置
t(mat)                    # 矩阵转置

请添加图片描述

数据框 data.frame

  • 创建
> # 写入姓名和分数向量
> names<-c("刘文涛","王宇翔","田思雨","徐丽娜","丁文斌") # 写入姓名向量
> stat<-c(68,85,74,88,63)  # 写入各门课程分数向量
> math<-c(85,91,74,100,82)
> econ<-c(84,63,61,49,89)> # 将向量组织成数据框形式
> table1_1<-data.frame(学生姓名=names,统计学=stat,数学=math,经济学=econ)
> # 将数据组织成数据框形式,并储存在对象table1_1中> table1_1学生姓名 统计学 数学 经济学
1   刘文涛     68   85     84
2   王宇翔     85   91     63
3   田思雨     74   74     61
4   徐丽娜     88  100     49
5   丁文斌     63   82     89
  • 查看
head(table) #默认输出前六行
head(table,3) #输出前三行
tail(table) #默认输出后六行
tail(table,3) #输后三行
class(table) #查看数据类型
nrow(table) #查看数据框行数
ncol(table) #查看数据框列数
dim(table) #查看数据框行数和列数 
> # 查看数据结构
> #table是一个数据框,有4个变量,每个变量有5个观测值,$后是数值变量。当数据量较大时,会省略很多数据。
> str(table1_1)        # 查看tabe1_1的数据结构
'data.frame':	5 obs. of  4 variables:$ 学生姓名: chr  "刘文涛" "王宇翔" "田思雨" "徐丽娜" ...$ 统计学  : num  68 85 74 88 63$ 数学    : num  85 91 74 100 82$ 经济学  : num  84 63 61 49 89
  • 合并
rbind(table1,table2) #按行合并数据框(列变量必须相同)
cbind(table1,table2)#按列合并数据框(行变量必须相同)
  • 排序
arrange(table,姓名) #package(dplyr)
table[order(table$姓名),]
sort(table$姓名)
#按姓名升序排列
arrange(table,desc(姓名)) 
table[order(table$姓名),decreasing =TRUE]
sort(table$姓名,decreasing =TRUE)
#按姓名升序降列

因子

因子:类别变量
水平:因子取值

将无序因子转换为数值

a<-c("金融","地产","医药","医药","金融","医药")      # 向量a
f1<-factor(a)                                    # 将向量a编码为因子
as.numeric(f1) 
[1] 2 1 3 3 2 3                                  # 将因子转换为数值

将无序因子转换为有序因子或数值

b<-c("很好","好","一般","差","很差")    			# 向量b
f2<-factor(b,ordered=TRUE,levels=c("很好","好","一般","差","很差"))
# 将向量b编码为有序因子
as.numeric(f2)     # 将因子转换为数值
[1] 1 2 3 4 5

列表

列表:一些对象的集合
list:创建列表
一个列表中可能包含若干向量、矩阵、数据框等

3.3 数据读取和保存

读取外部数据

table<-read.csv("路径.csv") #读取csv格式数据
table<-read.csv("路径.csv",header=FALSE) #读取csv格式数据,不含标题load("路径.RData") #读取R格式数据
write.csv(table,file="路径.csv") #保存为csv格式save(table,file="路径.RData") #保存为R格式

3.4 随机数与数据抽样

生成随机数

相应分布函数前+r

设置种子,保证你随机生成的随机数前后一致,使每次运行产生相同一组随机数
括号里面的参数可以是任意数字,是代表你设置的第几号种子而已,不会参与运算,是个标记而已。

set.seed(10)  #设定随机数种子
rnorm(n=20,mean=0,sd=1) #二十个标准正态分布随机数
rnorm(n=20,mean=50,sd=5) #二十个均值为五十,标准差为5的正态分布随机数
runif(n=20,min=0,max=10) #0-10之间产生20个均匀分布随机数
rchisq(n=20,df=15#产生20个自由度为15卡方分布随机数

数据抽样

n<-1:10
sample(n,size=10) #无放回抽取10个数据
[1]  7 17 13  5 18 11 10  3  9  6
sample(n,size=10,replace=TRUE) #有放回抽取10个数据
[1]  3  8  2 11  9  6 19 14 20  9
> Ncols<-c("black","red","green","blue","yellow")     # 5种不同的颜色向量
> ncols<-sample(Ncols,size=8,replace=TRUE);ncols      # 有放回抽取8个颜色
[1] "green"  "yellow" "yellow" "black"  "green"  "green"  "red"    "blue"  

3.5 数据类型转换

变量➡️向量

vector<-as.vector(table$col)
vector<-as.vector(c(table$col1,table$col2))
vector<-as.vector(as.matrix(table[row,col])) #数据框转换为向量

数据框➡️矩阵

# 将数据框转换为矩阵
mat<-as.matrix(table1_1[,2:4])             # 转换为矩阵mat
rownames(mat)=table1_1[,1]               # 矩阵的行名为table1_1第1列的名称
mat                                      # 查看矩阵

矩阵➡️数据框

table<-as.data.frame(mat)

短格式➡️长格式

合并一些列->长格式

gather(tidyr包 )

有标识变量

melt函数中的id.vars称为标识变量,用于指定按哪些因子汇集其他变量的值

library(reshape2)
melt:融合列表(id.vars variable.name value.name)

#  将短格式数据转换为长格式——有标识变量
> table1_1姓名 统计学 数学 经济学
1 刘文涛     68   85     84
2 王宇翔     85   91     63
3 田思雨     74   74     61
4 徐丽娜     88  100     49
5 丁文彬     63   82     89
> library(reshape2)       # 加载reshape2包
> tab.long<-melt(table1_1,id.vars="姓名",variable.name="课程",value.name="分数")
> # 融合table1_1与id变量,并命名variable.name="课程",value.name="分数“
> tab.long               # 显示tab.long姓名   课程 分数
1  刘文涛 统计学   68
2  王宇翔 统计学   85
3  田思雨 统计学   74
4  徐丽娜 统计学   88
5  丁文彬 统计学   63
6  刘文涛   数学   85
7  王宇翔   数学   91
8  田思雨   数学   74
9  徐丽娜   数学  100
10 丁文彬   数学   82
11 刘文涛 经济学   84
12 王宇翔 经济学   63
13 田思雨 经济学   61
14 徐丽娜 经济学   49
15 丁文彬 经济学   89
> # 使用tidyr包中的gather函数转换为长格式(有标识变量)
> table1_1姓名 统计学 数学 经济学
1 刘文涛     68   85     84
2 王宇翔     85   91     63
3 田思雨     74   74     61
4 徐丽娜     88  100     49
5 丁文彬     63   82     89
> library(tidyr)
> df1<-gather(table1_1,key="课程",value="分数","统计学","数学","经济学")     # key为融合后的变量名称
> df1姓名   课程 分数
1  刘文涛 统计学   68
2  王宇翔 统计学   85
3  田思雨 统计学   74
4  徐丽娜 统计学   88
5  丁文彬 统计学   63
6  刘文涛   数学   85
7  王宇翔   数学   91
8  田思雨   数学   74
9  徐丽娜   数学  100
10 丁文彬   数学   82
11 刘文涛 经济学   84
12 王宇翔 经济学   63
13 田思雨 经济学   61
14 徐丽娜 经济学   49
15 丁文彬 经济学   89

无标识变量

不使用id变量,自动融合

> #  将短格式数据转换为长格式——无标识变量
> table1_3统计学 数学 经济学
1     68   85     84
2     85   91     63
3     74   74     61
4     88  100     49
5     63   82     89
> library(reshape2)   # 加载reshape2包
> tab.long<-melt(table1_3,variable.name="课程",value.name="分数")
No id variables; using all as measure variables
> head(tab.long,3)    # 显示tab.long的前3行课程 分数
1 统计学   68
2 统计学   85
3 统计学   74
> # 使用tidyr包中的gather函数转换为长格式(无标识变量)
> table1_3统计学 数学 经济学
1     68   85     84
2     85   91     63
3     74   74     61
4     88  100     49
5     63   82     89
> library(tidyr)
> df2<-gather(table1_3,key="课程",value="分数","统计学","数学","经济学")
> df2课程 分数
1  统计学   68
2  统计学   85
3  统计学   74
4  统计学   88
5  统计学   63
6    数学   85
7    数学   91
8    数学   74
9    数学  100
10   数学   82
11 经济学   84
12 经济学   63
13 经济学   61
14 经济学   49
15 经济学   89

长格式➡️短格式

拆开->短格式

dcast:reshape2包 长转短
spread:tidyr包 长转短

3.6 生成频数表

类别数据的类别化

一维列联表

将频数表转化为百分数表:
prop.table(mytable)*100

> # 生成满意度的简单频数表
> example1_1<-read.csv("example1_1.csv")
> mytable<-table(example1_1$社区);mytable      
A社区 B社区 C社区 D社区 27    17    21    15 
> # 生成频数表
> prop.table(mytable)*100     # 将频数表转化成百分比表
A社区 B社区 C社区 D社区 
33.75 21.25 26.25 18.75 

二维列联表

添加边际和:
addmargins(mytable)
将频数表转化为百分数表
addmargins(prop.table(mytable)*100)

> a<-table(example1_1)
> a
, , 态度 = 反对性别
社区  男 女A社区  4  9B社区  3  2C社区  5  2D社区  2  4, , 态度 = 赞成性别
社区  男 女A社区  5  9B社区  7  5C社区  8  6D社区  2  7> # 生成社区与态度的二维列联表
> example1_1<-read.csv("example1_1.csv")
> attach(example1_1)                                   # 绑定数据
> mytable1<-table(态度,社区);mytable1  # 生成性别和满意度的二维列联表社区
态度   A社区 B社区 C社区 D社区反对    13     5     7     6赞成    14    12    14     9
> addmargins(mytable1)           # 为列联表添加边际和社区
态度   A社区 B社区 C社区 D社区 Sum反对    13     5     7     6  31赞成    14    12    14     9  49Sum     27    17    21    15  80
> addmargins(prop.table(mytable1)*100)  # 将列联表转换成百分比表社区
态度    A社区  B社区  C社区  D社区    Sum反对  16.25   6.25   8.75   7.50  38.75赞成  17.50  15.00  17.50  11.25  61.25Sum   33.75  21.25  26.25  18.75 100.00

多维列联表

确定多维列联表行列
ftable(example1_1,row.vars=c(“社区”),col.vars=c(“性别”,“态度”))

> # 生成三维频数表(列变量为“社区”)
> example1_1<-read.csv("example1_1.csv")
> mytable2<-ftable(example1_1,row.vars=c("性别","态度"),col.vars="社区")
> # 行变量为性别和态度,列变量为社区
> mytable2社区 A社区 B社区 C社区 D社区
性别 态度                             
男   反对          4     3     5     2赞成          5     7     8     2
女   反对          9     2     2     4赞成          9     5     6     7
> # 为列联表添加边际和
> ftable(addmargins(table(example1_1$性别,example1_1$态度,example1_1$社区)))                             A社区 B社区 C社区 D社区 Sum                          
男  反对      4     3     5     2  14赞成      5     7     8     2  22Sum       9    10    13     4  36
女  反对      9     2     2     4  17赞成      9     5     6     7  27Sum      18     7     8    11  44
Sum 反对     13     5     7     6  31赞成     14    12    14     9  49Sum      27    17    21    15  80
> # 生成三维频数表(列变量为"社区",行变量为“性别”和"满意度")
> ftable(example1_1,row.vars=c("社区"),col.vars=c("性别","态度"))性别   男        女     态度 反对 赞成 反对 赞成
社区                          
A社区         4    5    9    9
B社区         3    7    2    5
C社区         5    8    2    6
D社区         2    2    4    7
> library(vcd)
> structable(example1_1$性别+example1_1$态度~example1_1$社区,example1_1)example1_1$性别   男        女     example1_1$态度 反对 赞成 反对 赞成
example1_1$社区                                    
A社区                              4    5    9    9
B社区                              3    7    2    5
C社区                              5    8    2    6
D社区                              2    2    4    7> structable(example1_1,dirction=c("example1_1$社区","example1_1$性别","example1_1$态度"))性别 男 女
社区  态度           
A社区 反对       4  9赞成       5  9
B社区 反对       3  2赞成       7  5
C社区 反对       5  2赞成       8  6
D社区 反对       2  4赞成       2  7
> library(DescTools)
> mytable<-ftable(example1_1) 		#生成多维列联表
> mytable态度 反对 赞成
社区  性别               
A社区 男           4    59    9
B社区 男           3    72    5
C社区 男           5    82    6
D社区 男           2    24    7
将列联表转化为原始数据框
> library(DescTools)
> mytable<-ftable(example1_1) 		#生成多维列联表
> df<-Untable(mytable)				#将列联表转化为原始数据框
> df社区 性别 态度
1  A社区   男 反对
2  A社区   男 反对
3  A社区   男 反对
4  A社区   男 反对
5  B社区   男 反对...
将列联表转化为带有频数的数据框
> tab<-ftable(example1_1)
> tab态度 反对 赞成
社区  性别               
A社区 男           4    59    9
B社区 男           3    72    5
C社区 男           5    82    6
D社区 男           2    24    7
> df<-as.data.frame(tab)
> df社区 性别 态度 Freq
1  A社区   男 反对    4
2  B社区   男 反对    3
3  C社区   男 反对    5
4  D社区   男 反对    2
5  A社区   女 反对    9
6  B社区   女 反对    2
7  C社区   女 反对    2
8  D社区   女 反对    4
9  A社区   男 赞成    5
10 B社区   男 赞成    7
11 C社区   男 赞成    8
12 D社区   男 赞成    2
13 A社区   女 赞成    9
14 B社区   女 赞成    5
15 C社区   女 赞成    6
16 D社区   女 赞成    7

数值数据类别化

首先转化为因子,再生成频数分布表

> library(DescTools)
> tab<-Freq(example1_2$销售额)
> tablevel  freq   perc  cumfreq  cumperc
1   [160,170]     2   1.7%        2     1.7%
2   (170,180]     4   3.3%        6     5.0%
3   (180,190]     7   5.8%       13    10.8%
4   (190,200]    21  17.5%       34    28.3%
5   (200,210]    25  20.8%       59    49.2%
6   (210,220]    19  15.8%       78    65.0%
7   (220,230]    16  13.3%       94    78.3%
8   (230,240]    13  10.8%      107    89.2%
9   (240,250]     6   5.0%      113    94.2%
10  (250,260]     4   3.3%      117    97.5%
11  (260,270]     2   1.7%      119    99.2%
12  (270,280]     1   0.8%      120   100.0%
> tab<-Freq(example1_2$销售额,breaks = c(160,175,190,205,220,235,250,265,280),right=FALSE)
> tab1<-data.frame(分组=tab$level,频数=tab$freq,频数百分比=tab$perc*100,积累频数=tab$cumfreq,累计百分比=tab$cumperc*100)
> tab1分组 频数 频数百分比 积累频数 累计百分比
1 [160,175)    6   5.000000        6    5.00000
2 [175,190)    7   5.833333       13   10.83333
3 [190,205)   30  25.000000       43   35.83333
4 [205,220)   34  28.333333       77   64.16667
5 [220,235)   21  17.500000       98   81.66667
6 [235,250)   15  12.500000      113   94.16667
7 [250,265)    5   4.166667      118   98.33333
8 [265,280]    2   1.666667      120  100.00000

六、R语言绘图基础

两大底层绘图系统:base grid

6.1 基本绘图函数

graphics中

  • 高级绘图函数(直接产生图形)
  • 低级绘图函数(标题、文本注释、线段)

plot:反函数,可绘制多种图形
barplot:条形图
hist:直方图
boxplot:箱线图
legend:添加图例
layout:页面布局
mtext:为图形添加注释文本

par(mai=c(0.6,0.6,0.4,0.4),cex=0.7)            # 设置图形边界和符号的大小
set.seed(2025)                                 # 设置随机数种子
x <- rnorm(200)                                # 产生200个标准正态分布的随机数
y <- 1+2*x +rnorm(200)                         # 产生变量y的随机数
d<-data.frame(x,y)                             # 将数据组织成数据框d
plot(d,xlab="x=自变量",ylab="y=因变量")        # 绘制散点图
grid(col="grey60")                             # 添加网格线
axis(side=4,col.ticks="blue",lty=1)            # 添加坐标轴
polygon(d[chull(d),],lty=6,lwd=1,col="lightgreen")  # 添加多边形并填充底色
points(d)                                      # 重新绘制散点图
points(mean(x),mean(y),pch=19,cex=5,col=2)     # 添加均值点
abline(v=mean(x),h=mean(y),lty=2,col="gray30") # 添加均值水平线和垂直线
abline(lm(y~x),lwd=2,col=2)                    # 添加回归直线
lines(lowess(y ~ x,f=1/6),col=4,lwd=2,lty=6)   # 添加拟合曲线
segments(-0.8,0,-1.6,3.3,lty=6,col="blue")     # 添加线段
arrows(0.45,-2.2,-0.8,-0.6,code=2,angle=25,length=0.06,col=2) # 添加带箭头的线段
text(-2.2,3.5,labels=expression("拟合的曲线"),adj=c(-0.1,0.02),col=4) # 添加注释文本
rect(0.4, -1.6, 1.8,-3,col="pink",border="grey60")  # 添加矩形mtext(expression(hat(y)==hat(beta)[0]+hat(beta)[1]*x),cex=0.9,side=1,line=-2.5,adj=0.7)                         # 添加注释表达式legend("topleft",legend=c("拟合的直线","拟合的曲线"),lty=c(1,6),col=c(2,4),cex=0.8,fill=c("red","blue"),box.col="grey60",ncol=1,inset=0.02)  # 添加图例
title("散点图及拟合直线和曲线\n并为图形增加新的元素",cex.main=1,font.main=4)  # 增加标题并折行,使用斜体字
box(col=4,lwd=2)                             # 添加边框14

请添加图片描述

6.2 图形控制和页面布局

6.2.1 图形参数

  • par函数中参数:

绘图符号pch
线型lty
线宽lwd
点的大小pt.cex
位置调整参数adj
主要颜色col

请添加图片描述

6.2.2 页面布局

页面分割和图形组合方法

  • par函数

mfrow、mfcol将绘图页面分割成nr*nc的矩阵,然后在每个分割区域填充一张图 mfrow=c(nr,nc)按行填充各图
mfcol=c(nr,nc)按列填充各图

par(mfrow=c(2,2),mai=c(0.4,0.4,0.3,0.1),cex=0.7,mgp=c(2,1,0),cex.axis=0.8,cex.main=0.8,font.main=1)
set.seed(123)         # 设置随机数种子
x<-rnorm(100) # 生成100个标准正态分布随机数
y<-rexp(100) # 生成100个指数分布随机数
plot(x,y,col=sample(c("black","red","blue"),100,replace=TRUE),main="(a) 散点图")
boxplot(x,y,col=2:3,main="(b) 箱线图")
hist(x,col="orange1",ylab="y",main="(c) 直方图")
barplot(runif(5,10,20),col=2:6,main="(d) 条形图")

请添加图片描述

  • layout函数

可设置参数widths和heights将矩阵分割成大小不同的区域
使用layout.show函数可以进行预览

# 2行2列的图形矩阵,第2列为1个图
layout(matrix(c(1,2,3,3),nrow=2,ncol=2,byrow=TRUE),heights=c(2,1))
layout.show(3)
# 2行2列的图形矩阵,第2列为1个图
layout(matrix(c(1,2,3,3),nrow=2,ncol=2),heights=c(2,1))
layout.show(3)
# 2行3列的图形矩阵,第2行为3个图
layout(matrix(c(1,1,1,2,3,4),nrow=2,ncol=3,byrow=TRUE),widths=c(3:1),heights=c(2,1))
layout.show(4)
# 3行3列的图形矩阵,第2行为2个图
layout(matrix(c(1,2,3,4,5,5,6,7,8),3,3,byrow=TRUE),widths=c(2:1),heights=c(1:1))
layout.show(8)

请添加图片描述

# 绘制代码
n=100;set.seed(12);x<-rnorm(n);y<-rexp(n)
layout(matrix(c(1,2,3,4,5,5,6,7,8),3,3,byrow=TRUE),widths=c(2:1),heights=c(1:1))
par(mai=c(0.3,0.3,0.3,0.1),cex.main=0.9,font.main=1)
barplot(runif(8,1,8),col=2:7,main="(a) 条形图")
pie(1:12,col=rainbow(6),labels="",border=NA,main="(b) 饼图")
qqnorm(y,col=1:7,pch=19,xlab="",ylab="",main="(c) Q-Q图")
plot(x,y,pch=19,col=c(1,2,4),xlab="",ylab="",main="(d) 散点图")
plot(rnorm(25),rnorm(25),cex=(y+2),col=2:4,lwd=2,xlab="",ylab="",main="(e) 气泡图")
plot(density(y),col=4,lwd=1,xlab="",ylab="",main="(f) 核密度图");polygon(density(y),col="gold",border="blue")
hist(rnorm(1000),col=3,xlab="",ylab="",main="(g) 直方图")
boxplot(x,col=2,main="(h) 箱线图")

请添加图片描述

6.2.3 图形颜色

  • 颜色名称和颜色集合函数

colors():查看R软件中所有颜色
graphics中
col设置绘图区域中的绘制的数据符号、线条、文本等元素颜色
bg设置图形背景颜色
fg设置图形的前景颜色

# col的设置
x<-1:10    # 生成1到10的等差数列
a<- LETTERS[1:10]     # 生成字母标签向量
par(mfrow=c(1,2),mai=c(0.4,0.4,0.3,0.2),cex=0.8,cex.axis=0.7,cex.lab=0.8,mgp=c(2,1,0),cex.main=0.9,font.main=1)               # 图形参数设置
barplot(x,names=a,col=c("red","green"),main="(a) 循环使用2种颜色")
barplot(x,names=a,col=1:8,main="(b) 重复使用颜色1:8")

请添加图片描述

# 颜色集合
par(mfrow=c(2,3),mai=c(0.3,0.3,0.3,0.1),cex=0.7,mgp=c(1,1,0),cex.axis=0.7,cex.main=1,font.main=1)
x<-1:7
names<-LETTERS[1:7]       # 生成字母标签向量
barplot(x,names=names,col=rainbow(7),main="col=rainbow()")
barplot(x,names=names,col=rainbow(7,start=0.4,end=0.5),main="col=rainbow(start=0.4,end=0.5)")
barplot(x,names=names,col=heat.colors(7),main="col=heat.colors()")
barplot(x,names=names,col=terrain.colors(7),main="col=terrain.colors()")
barplot(x,names=names,col=topo.colors(7),main="col=topo.colors()")
barplot(x,names=names,col=cm.colors(7),main="col=cm.colors()")

请添加图片描述

  • 调色板

display.brewer.all 查看R的调色板
brewer.pal 创建自己的调色板

# 图1-9的绘制代码——使用调色板
library(RColorBrewer)
par(mfrow=c(2,3),mai=c(0.1,0.3,0.3,0.1),cex=0.6,font.main=1)
palette1<-brewer.pal(7,"Reds")            # 7种颜色的红色连续型调色板
palette2<-brewer.pal(7,"Set1")            # 7种颜色的离散型调色板
palette3<-brewer.pal(7,"RdBu")            # 7种颜色的红蓝色极端值调色板
palette4<-rev(brewer.pal(7,"Greens"))     # 调色板颜色反转
palette5<-brewer.pal(8,"Spectral")[-1]       # 去掉第1种颜色,使用其余7种
palette6<-brewer.pal(6,"RdYlBu")[2:4]     # 使用其中的2:4种颜色
barplot(1:7,col=palette1,main="(a) 红色连续型调色板")
barplot(1:7,col=palette2,main="(b) 离散型调色板")
barplot(1:7,col=palette3,main="(c) 极端值调色板")
barplot(1:7,col=palette4,main="(d) 调色板颜色反转")
barplot(1:7,col=palette5,main="(e) 去掉第1种颜色")
barplot(1:7,col=palette6,main="(f) 使用其中的2:4种颜色")

请添加图片描述

par函数

请添加图片描述
请添加图片描述

layout函数

请添加图片描述

————————————————
版权声明:本文为CSDN博主「苟悌」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jiangti_ng/article/details/121162222

Published by

风君子

独自遨游何稽首 揭天掀地慰生平