R笔记-1

2019-10-18  本文已影响0人  毛线东东a

20191019
mac电脑如果安装R后报如下错误:
During startup - Warning messages:
1: Setting LC_CTYPE failed, using "C"
2: Setting LC_COLLATE failed, using "C"
3: Setting LC_TIME failed, using "C"
4: Setting LC_MESSAGES failed, using "C"
5: Setting LC_PAPER failed, using "C"
[R.app GUI 1.50 (6126) x86_64-apple-darwin9.8.0]
WARNING: You're using a non-UTF8 locale, therefore only ASCII characters will work. Please read R for Mac OS X FAQ (see Help) section 9 and adjust your system preferences accordingly. [History restored from /Users/nemo/.Rapp.history]
解决办法
Open Terminal
Write or paste in: defaults write org.R-project.R force.LANG en_US.UTF-8
Close Terminal (including any RStudio window)
Start R

  1. R中的赋值符号是 <- ,而不是 =
  2. 注释符号:#。r不支持多行注释,可以使用if语句,或者逐行注释的方法。
  3. q( ) 结束会话并退出R
  4. control+L 或 cat(‘\f') 可以清空当前界面,针对r-studio
  5. option+command+L 针对mac下的R,清空界面。可以在编辑-清除界面这里查看快捷键。
  6. 在R中可以通过source来运行代码
    例如:
source(“/Lie-manuscript/old_桌面/picture.R")

但是运行的结果不会直接在窗口输出显示,但是其实是已经运行了的,得到的变量都可以在r-studio中的environment中看到,或者在r中直接输入变量名,可以看到结果。
如果想在窗口及时显示运行结果,则需输入

source(“/Lie-manuscript/old_桌面/picture.R", echo=TRUE)
  1. RStudio 支持三种同时执行多行代码的方式:
  1. getwd( ) 函数来获取当前工作路径; setwd()设定当前工作路径。需要注意的是,setwd()不会创建一个不存在的路径,如果要新建文件夹,需要用dir.create()
  2. install.packages(‘data.table') 将安装“data.table”这个包,update.packages() 更新包。
  3. 在Console中输入help( )函数,( )内输入所要查询的函数,可以查看帮助。比如:help(mean)。或者直接在Console输入?mean。

20191020

  1. 平均值 mean()
    通常使用mean来计算样本的均值,但均值往往会受到样本中一些异常值的影响,因此需要去掉这部分数据,此时我们就要用到mean的trim参数。
    trim的取值范围为0到0.5之间,表示在计算均值前,需要在首尾分别去掉的异常值的比例。下面通过具体实例说明:


    mean函数中trim用法举例.png

    如上图所示,x是一个包含12个元素的矩阵,trim=0.083,意味着要在首尾分别去掉12 * 0.083=0.996个数据。如果是小数,也就是这里的0.996,则取小数点前的,这里就是取0,也就是不去除数据,所以平均值是8.75。当trim=0.093时,12 * 0.093=1.116,首尾各去除1个数字,也就是去掉0和50,平均值为5.5。如果trim=0.5,首尾各去除12*0.5=6个数字,但是结果还是5.5,这个我暂时也不太懂,先mark一下。


    image.png
  2. 标准差 sd()
  3. 相关 cor()
  4. data() 列出当前已加载包中所有可用示例数据集。
  5. save() 保存指定对象到一个文件夹中。下图中的例子,就是将x这个变量保存到/Users/chenmei文件夹下,命名为myfile。之后删除x变量,工作空间中将不存在x,接着在load(),载入这个文件,x就被载入工作空间中。
getwd()
[1] "/Users/chenmei"
> save(x, file="myfile") 
> rm(x)
> load( "/Users/chenmei/myfile")
  1. .libPaths() 显示库所在的位置
  2. library() 显示库中有哪些包。
  3. search()可以告诉你哪些包已加载可以使用。
  4. help(package="ggplot2") 可以输出某个包的简短描述以及包中的函数名称和数据集名称的列表。
  5. R语言是区分大小写的。
  6. 要了解某个函数的返回值,查阅这个函数的帮助文档中的value部分即可。这样就可以知道将某个函数的结果赋值到一个变量之后,保存下来的结果具体是什么。

20191021
R中的数据结构

R中的数据结构.png
  1. 向量
    向量是用于存储数值型、字符型或逻辑型数据的一维数组。
    向量通过函数c()来创建。
a<-c(1,2,5,7,9) #数值型
b<-c("a","b","c","d","e") #字符型
c<-c(TRUE,FALSE,TURE,TURE,FALSE) #逻辑型,需要注意逻辑字符需要大写。

访问向量中的元素,需要使用中括号。这里跟matlab有区别,matlab是小括号。

> b[3]
[1] "c"
> b[c(2,4)]
[1] "b" "d"
> b[2:5]
[1] "b" "c" "d" "e"
  1. 矩阵
    矩阵是一个二位数组,也是数值型、字符型和逻辑型三种。
    读取矩阵中的元素需要使用中括号和下标。
e<-matrix(c(1,2,3,4,5,6,7,8),nrow=4,ncol=2,byrow=TRUE,dimnames=list(c("a","b","c","d"),c("age","height"))) 
#matrix()函数用来创建矩阵,c(1,2,3,4,5,6,7,8)代表数据,nrow代表行数,ncol代表列数,byrow=TRUE代表按照行来填充,byrow=FALSE代表按列填充,默认也是按照列来填充的。dimnames代表行名和列名。
> e
  age height
a   1      2
b   3      4
c   5      6
d   7      8
> e[1,]
   age height 
     1      2 
> e[,2]
a b c d 
2 4 6 8 
> e[3,2]
[1] 6
> e[c(2:4),2]
b c d 
4 6 8 
  1. 数组
    数组是三维数据,通过array()函数创建。读取数组数据依旧是通过中括号[]和下标。
> f<-array(c(1:18),c(2,3,3),dimnames=list(c("a","b"),c("c","d","e"),c("f","g","h"))) 
# c(1:18)是数组中的数据,c(2,3,3)代表数组的维度,dimnames代表数组每个维度的名称。
> f
, , f

  c d e
a 1 3 5
b 2 4 6

, , g

  c  d  e
a 7  9 11
b 8 10 12

, , h

   c  d  e
a 13 15 17
b 14 16 18

> f[1,2,3]
[1] 15
> f[1:2,2,3]
 a  b 
15 16 
> f[1:2,2,c(1,3)]
  f  h
a 3 15
b 4 16
  1. 数据框架
    类似于spss中数据的类型,不同的列可以包含不同模式的数据。可以说是R中做常用的数据结构。
    通过函数data.frame()来创建。
> id<-c("sub01","sub02","sub03","sub04","sub05","sub06","sub07","sub08","sub09","sub10")
> id
 [1] "sub01" "sub02" "sub03" "sub04" "sub05" "sub06" "sub07" "sub08" "sub09" "sub10"
> g<-data.frame(n1=1:10,n2=2:11,n3=3:12,row.names=id) #n1,n2,n3是每一列的名称, row.names定义行的名称。
> g
      n1 n2 n3
sub01  1  2  3
sub02  2  3  4
sub03  3  4  5
sub04  4  5  6
sub05  5  6  7
sub06  6  7  8
sub07  7  8  9
sub08  8  9 10
sub09  9 10 11
sub10 10 11 12
 > g[1:3,] #读取1到3行的数据
      n1 n2 n3
sub01  1  2  3
sub02  2  3  4
sub03  3  4  5
> g[,1:2] #读取1到2列的数据
      n1 n2
sub01  1  2
sub02  2  3
sub03  3  4
sub04  4  5
sub05  5  6
sub06  6  7
sub07  7  8
sub08  8  9
sub09  9 10
sub10 10 11
> g[,c(1,3)]  #读取第一列和第三列的数据
      n1 n3
sub01  1  3
sub02  2  4
sub03  3  5
sub04  4  6
sub05  5  7
sub06  6  8
sub07  7  9
sub08  8 10
sub09  9 11
sub10 10 12
> g$n2 #$符号可以直接指定读取某一列的数据。
 [1]  2  3  4  5  6  7  8  9 10 11
> attach(g) # 将数据框g添加到R的搜索路径中,后续可以直接调用某一列,不需要每次都写g$n1,可以直接写n1,如下一句代码所示。
> n1
 [1]  1  2  3  4  5  6  7  8  9 10
> detach(g) #将数据框从搜索路径移除。所以后面直接输入n1,会报错。
> n1
Error: object 'n1' not found
# 另一种方法是使用函数with(),此函数的局限是赋值仅在此函数的括号内{}生效。如果要在全局环境中都生效,需要使用赋值符号<<-替代符号<-
> with(g,{
+ n1})
 [1]  1  2  3  4  5  6  7  8  9 10
> with(g,{
+ a<-n1
+ b<<-n2
+ })
> a #a变量只在上面的with的大括号内生效,所以直接输入a,检索不到此对象。
Error: object 'a' not found
> b #b是全局变量所以可以检索到
 [1]  2  3  4  5  6  7  8  9 10 11
  1. 因子
    在R中把类别型和顺序型变量成为因子。
    用函数factor()表示。
> id<-c("sub01","sub02","sub03","sub04","sub05","sub06","sub07","sub08","sub09","sub10")
> sex1<-c("f","m","m","f","f","m","f","f","m","f")
> sex2<-c(1,2,2,1,1,2,1,1,2,1)
> sex22<-factor(sex2,levels=c(1,2),labels=c("m","f")) #将sex2中的数字存储为字符f和m,1存储为m,2存储为f。
> sex22
 [1] m f f m m f m m f m
Levels: m f
> sex11<-factor(sex1) #将字符跟数字绑定在一起,即将sex1存储为(1,2,2,1,1,2,1,1,2,1),也就是按照字母顺序排序,f存储为1,m存储为2。
> sex11
 [1] f m m f f m f f m f
Levels: f m
> sex12<-factor(sex1,level=c("m","f")) #如果要自己定义存储的数值,则需要加上levels=c("m","f"),这样,m存储为1,f存储为2。
> sex12
 [1] f m m f f m f f m f
Levels: m f
> effect<-c("poor","improved","excellent","poor","improved","excellent","poor","improved","excellent","improved")
> factor(effect,order=TRUE,levels=c("poor","improved","excellent")) #order=TRUE是针对顺序型变量而言,levels=c("poor","improved","excellent")也就是将("poor","improved","excellent")存储为(1,2,3)。
> str(effect1) #str()函数提供变量的信息
 Ord.factor w/ 3 levels "poor"<"improved"<..: 1 2 3 1 2 3 1 2 3 2
> effect1<-factor(effect,order=TRUE)
#order=TRUE是针对顺序型变量而言,将("poor","improved","excellent")存储为(3,2,1),因为没有指定levels,所以这里是按照首字母拼音排序的。
> str(effect1)
 Ord.factor w/ 3 levels "excellent"<"improved"<..: 3 2 1 3 2 1 3 2 1 2
> data<-data.frame(n=1:10,sex=sex12,effect=effect1,row.names=id)
> data
       n sex    effect
sub01  1   f      poor
sub02  2   m  improved
sub03  3   m excellent
sub04  4   f      poor
sub05  5   f  improved
sub06  6   m excellent
sub07  7   f      poor
sub08  8   f  improved
sub09  9   m excellent
sub10 10   f  improved
> str(data)
'data.frame':   10 obs. of  3 variables:
 $ n     : int  1 2 3 4 5 6 7 8 9 10
 $ sex   : Factor w/ 2 levels "m","f": 2 1 1 2 2 1 2 2 1 2
 $ effect: Ord.factor w/ 3 levels "excellent"<"improved"<..: 3 2 1 3 2 1 3 2 1 2
> summary(data) #变量data的概要。连续型会显示最小值、最大值、中位数、平均值和第1第3四分位数。类别变量和顺序变量会显示各水平的频数。
       n         sex         effect 
 Min.   : 1.00   m:4   excellent:3  
 1st Qu.: 3.25   f:6   improved :4  
 Median : 5.50         poor     :3  
 Mean   : 5.50                      
 3rd Qu.: 7.75                      
 Max.   :10.00                      
  1. 列表
    列表是R的数据类型中最为复杂的一种。是一些对象的有序集合。他可以包含向量、矩阵、数据框、甚至其他列表的组合。
    使用函数list()来创建列表:
> mylist<-list(title="list1",sex=c("f","m","m","f"),age=c(12,13,15,10),m=matrix(2:10,nrow=3,byrow=TRUE))
# title, sex, age和m是指每个对象的名称
> mylist
$title
[1] "list1"

$sex
[1] "f" "m" "m" "f"

$age
[1] 12 13 15 10

$m
     [,1] [,2] [,3]
[1,]    2    3    4
[2,]    5    6    7
[3,]    8    9   10
如果需要引用列表中的对象,可以用双中括号[]或者$,括号内和$后是对象的名称。如果用中括号,对象名称需要加引号。
$符号指定一个数据框或列表中的某些成分。
这里如果用单中括号,则表示只是输出m对象和对象的值,双中括号直接输出对象的值。具体不同可以自己试一下,然后看结果有何不同,见截图1。
> mylist[["m"]]
     [,1] [,2] [,3]
[1,]    2    3    4
[2,]    5    6    7
[3,]    8    9   10
> mylist$m
     [,1] [,2] [,3]
[1,]    2    3    4
[2,]    5    6    7
[3,]    8    9   10
如果需要引用对象中的某一个数值,则如下:
> mylist$age[2]
[1] 13
> mylist2<-list(title="list1",sex=c("f","m","m","f"),age=c(12,13,15,10),matrix(2:10,nrow=3,byrow=TRUE))
# 如果不写对象名称,则系统默认用数字表示,比如这个例子中,最后一个变量就用4来表示。
> mylist2
$title
[1] "list1"

$sex
[1] "f" "m" "m" "f"

$age
[1] 12 13 15 10

[[4]]
     [,1] [,2] [,3]
[1,]    2    3    4
[2,]    5    6    7
[3,]    8    9   10
没有对象名称,用数字表示的这种情况,如果需要引用对象中的某一个数值,则需要用双中括号来表示。其实就是可以看mylist2 自己展示出来的情况,左上角都会展示每一个对象该怎么引用。参见截图
> mylist2[[4]][1,3]
[1] 4
截图
截图1
出于调试代码的目的,可以把不需要显示的代码,用if (FALSE) {...}来表示,让这些代码被忽略,如果需要运行,则把FALSE改成TRUE。

数据读取

  1. 从带分隔符的文本文件导入数据
    使用 read.table() 函数来读取。
> mydata7<-read.table("student.csv",header = TRUE,row.names="Last",sep=",") 
#student.csv指当前工作路径下需要读取的文件名,header = TRUE代表读取标题栏,也就是把第一行读取为标题。如果这里是FALSE,则第一行也作为数据,标题就是默认的v1,v2这种的。sep=","是指数据之间是用逗号分割的,读取时候按照逗号来读取数据。row.names="Last"代表将Last这一列数据当作行名称。
> mydata7
              StudentID First Math Science Social.Studies
Smith                11   Bob   90      80             67
Weary                12  Jane   75      NA             80
Thornton, III        10   Dan   65      75             70
O'Leary              40  Mary   90      95             92

> mydata8<-read.table("student.csv",header = FALSE,sep=",")
> mydata8
         V1    V2            V3   V4      V5             V6
1 StudentID First          Last Math Science Social Studies
2        11   Bob         Smith   90      80             67
3        12  Jane         Weary   75                     80
4        10   Dan Thornton, III   65      75             70
5        40  Mary       O'Leary   90      95             92
  1. 从excel文件导入数据
    首先需要载入3个R包。rJava xlsxjars xlsx
> library(rJava)
> library(xlsxjars)
> library(xlsx)
> mydata5<-read.xlsx("student.xlsx",header = TRUE,row.names="StudentID",1)
# 这里的数字1代表读取excel第一个sheet的数据。row.names="StudentID"代表将StudentID这一列当作是行名称。
> mydata5
  First          Last Math Science Social.Studies
11   Bob         Smith   90      80             67
12  Jane         Weary   75      NA             80
10   Dan Thornton, III   65      75             70
40  Mary       O'Leary   90      95             92

> mydata2<-read.xlsx("student.xlsx",2) #这里的数字2代表读取第二个sheet的数据
> mydata2
 X1 X5 q
1  2  6 a
2  3  7 z
3  4  8 x
  1. 导入spss数据
    首先需要载入包 Hmisc,使用这个包中的spss.get函数来读取数据。
install.packages("Hmisc")
> library(Hmisc)
# 安装好载入的时候会提示需要额外安装4个包
Loading required package: lattice
Loading required package: survival
Loading required package: Formula
Loading required package: ggplot2
> install.packages("lattice")
> install.packages("survival")
> install.packages("Formula")
> install.packages("ggplot2")
> library(Hmisc) #安装好那几个包,然后在载入这个Hmisc工具包就OK了

> deceptiondata<-spss.get("deception.sav")
> deceptiondata
  sub    sex decepton.success.rate
1 1201   male                  0.44
2 1202 female                  0.52
3 1203 female                  0.45
4 1204   male                  0.60
> str(deceptiondata)
'data.frame':   4 obs. of  3 variables:
$ sub                  : int  1201 1202 1203 1204
$ sex                  : Factor w/ 2 levels "male","female": 1 2 2 1
$ decepton.success.rate: num  0.44 0.52 0.45 0.6
- attr(*, "codepage")= int 65001

实用函数

> length(mydata1) #显示对象中元素/成分的数量
[1] 6
> dim(mydata1) #显示某个对象的维度,也就是几行几列
[1] 4 6
> str(mydata1) #显示某个对象的数据结构
'data.frame':   4 obs. of  6 variables:
$ StudentID     : num  11 12 10 40
$ First         : Factor w/ 4 levels "Bob","Dan","Jane",..: 1 3 2 4
$ Last          : Factor w/ 4 levels "O'Leary","Smith",..: 2 4 3 1
$ Math          : num  90 75 65 90
$ Science       : num  80 NA 75 95
$ Social.Studies: num  67 80 70 92
> class(mydata1) #显示某个对象的类型(数组、数据框等)
[1] "data.frame"
> mode(mydata1) #显示某个对象的模式
[1] "list"
> names(mydata1) #显示某对象中各成分的名称
[1] "StudentID"      "First"          "Last"           "Math"           "Science"       
[6] "Social.Studies"
> my<-cbind(mydata1,mydata3) #cbind按照列合并对象,也就是保持原来的行数不变,列数增加。
> my
 StudentID First          Last Math Science Social.Studies StudentID First          Last Math
1        11   Bob         Smith   90      80             67        11   Bob         Smith   90
2        12  Jane         Weary   75      NA             80        12  Jane         Weary   75
3        10   Dan Thornton, III   65      75             70        10   Dan Thornton, III   65
4        40  Mary       O'Leary   90      95             92        40  Mary       O'Leary   90
 Science Social.Studies
1      80             67
2      NA             80
3      75             70
4      95             92
> my2<-rbind(mydata1,mydata3) #rbind按照行合并对象,也就是列数不变,行数增加
> my2
 StudentID First          Last Math Science Social.Studies
1        11   Bob         Smith   90      80             67
2        12  Jane         Weary   75      NA             80
3        10   Dan Thornton, III   65      75             70
4        40  Mary       O'Leary   90      95             92
5        11   Bob         Smith   90      80             67
6        12  Jane         Weary   75      NA             80
7        10   Dan Thornton, III   65      75             70
8        40  Mary       O'Leary   90      95             92
> tail(mydata1,n=2) # tail 列出某个对象的最后部分,n=2代表列出最后两行
 StudentID First          Last Math Science Social.Studies
3        10   Dan Thornton, III   65      75             70
4        40  Mary       O'Leary   90      95             92
> tail(mydata1,n=-1) #这里n=-1代表列出除了第1行外的所有数据,其实等价于tail(mydata1,n=3)
 StudentID First          Last Math Science Social.Studies
2        12  Jane         Weary   75      NA             80
3        10   Dan Thornton, III   65      75             70
4        40  Mary       O'Leary   90      95             92
> head(mydata1,n=1) # head列出某个对象的开始部分,n=1代表列出第一行。
 StudentID First  Last Math Science Social.Studies
1        11   Bob Smith   90      80             67
> head(mydata1,n=-1) #这里n=-1代表,列出除了最后一行外的所有。等价于n=3。
 StudentID First          Last Math Science Social.Studies
1        11   Bob         Smith   90      80             67
2        12  Jane         Weary   75      NA             80
3        10   Dan Thornton, III   65      75             70

图形初阶

  1. plot画图并保存
> tiff("cars.tiff")   #保存成tiff格式。
#Notes: r中非ggplot作图,保存的图片默认是72dpi,清晰度是很低的。这个目前我知道唯一的调整方法是保存成eps格式,然后用illustration打开,在另存成tiff等格式。
> attach(mtcars) 
> plot(wt,mpg) 
# plot画图,形式是 plot(a,b,type="value") 
# type:以什么样的形式来画a,b之间的关系:·"p":点;·"l" :线;·"b":即有点又有线,点与线不相交;·"c":仅有线,但不连续,在本应画点的地方断开了;·"o":即有点又有线,点与线相交,(overplot);·"h":抽象成高密度的直方图;·"n":图上没有任何的点,即空图,no plotting.
> abline(lm(mpg~wt)) # 给当前图形窗口添加直线,lm(y~x),注意区分y和x。
> title("Regression of MPG on Weight") #添加图形标题
> detach(mtcars)
> dev.off() #关闭图形设备

2.dev类函数
详情参考这篇博客
(1)函数功能:在多个图形设备之间提供控制功能。
(2)使用:
·所有的关于图形的操作都在一个设备中进行,即仅有一个设备是“活跃设备”;
·"空设备(null device)":总是打开的,起着占位作用;
·任何想使用空设备的操作,会导致另外一个设备被打开,一旦有其他设备被打开,则空设备不再是一个活跃设备了;
·设备可以有各自的名字,同时有编号,从1到63;
·空设备的编号始终是1;
注意:打开的设备,活跃设备,空设备的概念。
(3)dev.list():返回打开的设备的名单列表,但不包含空设备;
(4)dev.off():关闭指定的设备(缺省情况下为当前设备);当前设备被关闭后,若还有打开的设备,则紧接着的下一个打开的设备变为当前设备;
返回新打开的活跃设备的名字和编号。
注意:设备1是不能被关闭的,即对设备1进行关闭操作是错误的;
(5)graphics.off():关闭所有打开的设备;
(6)dev.set(): 指定一个特定的设备为活跃设备,但若没有那个指定的设备,等同于dev.next();若指定设备的值为1,则打开一个新的设备,并且指定那个设备为活跃设备。
返回新设备的名字和编号。
(7)dev.new():打开一个新的设备。R中经常根据需要自动的打开新的设备,但也能使用跨平台的方式打开更多的设备;返回新设备的名字和编号。
(8)dev.cur():查看当前的活跃设备;返回包含当前活跃设备的名字和编号的向量;如果是返回值是1,空设备,即没有活跃设备。
(9)dev.next():查看紧随当前活跃进程的下一个进程;返回其名字和编号。
(10)dev.prev():查看当前活跃进程的前一个进程;返回其名字和编号。

如果需要画多幅图,新画的图会把之前的图覆盖掉。
可以通过dev.new()新建一个图形窗口,再重新画图。

  1. hist()绘制直方图
  2. 图形参数
    设置图形参数有两种方式:
## 输入数据
> dose <- c(20, 30, 40, 45, 60)
> drugA <- c(16, 20, 27, 40, 60)
> drugB <- c(15, 18, 25, 31, 40)
> drugdata<-data.frame(dose,drugA,drugB)
##绘图
> plot(dose,drugA,type="b") 
> op<-par(lty=2,pch=17) # lty用来指定线形,2代表虚线。pch指定点符号类型,17代表实心三角形。
## 需要特别注意的是,par()函数指定的参数是直接修改图形窗口的设置,也就是说,如果不修改的话,是对接下来所有的图形都适用的。相当于修改的是全局。
> plot(dose,drugA,type="b") #这条命令就是用修改后的参数画图
> plot(dose,drugB,type="b") # 这条画出的图也是修改后的参数
> par(op) # At end of plotting, reset to previous settings恢复默认设置,也就是把自己刚才设置的参数还原回原始的,这样接下来在画图就是默认设置了。
> plot(dose,drugB,type="b") #这条命令画出的图就是默认的设置,不是之前设置的虚线,实心三角形了。
> dev.off() #关闭图形窗口
## 这样绘图的参数设置就仅仅是针对当前的图形适用,而不会影响后续的画图。
> plot(dose,drugA,type="b",lty=2,pch=17)

我个人认为如果是每个图的设置不同,可以通过直接声明的方式,而如果是有统一的格式要求,一开始通过par()函数指定,会更方便。

一些常用的参数:符号和线条

用于指定符号和线条类型的常用参数
参数pch可指定的绘图符号详解
参数lty可指定的线条类型

绘图颜色


用于指定颜色的参数

在R中,可以通过很多方法来指定颜色,例如:颜色下标 (col=1),颜色名(col="white"),十六进制的颜色值(col="#FFFFFF"),RGB值(col=rgb(1,1,1))或HSV值(col=hsv(0,0,1))。
RGB是基于红绿蓝三色值生成的颜色,而hsv则是基于色相-饱和度-亮度值生成的颜色。

想要知道内置的657种类color分别是什么颜色,可以使用colors()返回所有颜色的名称。如果想要可视化看到所有颜色,可以通过如下代码生成657中颜色显示的pdf文件。

pdf(file = "RColors.pdf",height = 20,width = 30)
par(mar=c(0,0,0,0))
plot(0, 0, type = "n", xlim = c(0, 1), ylim = c(0, 1), axes = FALSE, xlab = "", ylab = "")
line=30
col=22
rect(  rep((0:(col - 1)/col),line) ,  sort(rep((0:(line - 1)/line),col),decreasing=T)   ,   rep((1:col/col),line) , sort(rep((1:line/line),col),decreasing=T),  border = "light gray" , col=colors()[seq(1,line*col)])
text(  rep((0:(col - 1)/col),line)+0.02 ,  sort(rep((0:(line - 1)/line),col),decreasing=T)+0.015 , colors()[seq(1,line*col)]  , cex=0.9)
dev.off()

R中有许多函数可以用来创建连续型颜色向量,例如 rainbow() 可以生成n种连续的彩虹型颜色, heat.colors(), terrain.colors(), topo.colors(), brewer.pal(n,name) 以及 cm.colors()。
brewer.pal(n,name) 是很常用的用来创建吸引人的颜色配对的函数。需要首先载入RColorBrewer包。

install.packages("RColorBrewer")
library(RColorBrewer)
n<-7
mycolo<- brewer.pal(n,"Set1") #表示从Set1调色板中抽取了7种用16进制表示的颜色并返回一个向量,将其赋值给mycolo
barplot(rep(1,n),col=mycolo) #barplot用上述颜色绘制条形图,rep重复数字,rep(1,7)将1重复7次,也就是7个1矩阵。

brewer.pal.info # 在窗口输出所有颜色的文字列表
display.brewer.all() #可视化形式输出所有颜色

rainbow()

> rainbow(10) #生成10中彩虹色
 [1] "#FF0000FF" "#FF9900FF" "#CCFF00FF" "#33FF00FF" "#00FF66FF"
 [6] "#00FFFFFF" "#0066FFFF" "#3300FFFF" "#CC00FFFF" "#FF0099FF"
> library(scales) #载入包来可视化上述颜色
> show_col(rainbow(10),labels=T) #labels控制是否显示HEX格式的色值信息,也就是是否在颜色上显示名称,T就是显示,F就是不显示,默认是显示.
> show_col(rainbow(10),labels=F) 
> show_col(rainbow(10)) 

#还有一种可视化颜色的方法是:画饼图
n<-10
mycolor<-rainbow(n) #生成10种彩虹色
pie(rep(1,n),labels=mycolor,col=mycolor) #pie()函数画饼图,rep(1,n)数据,labels标签也就是颜色的文字名称,col用来指定名称对应的颜色。

灰度色需要通过gray()函数来生成,通过0和1之间的向量来指定各颜色的灰度。

n<-10
mygray<-gray(0:n/n) #生成灰度颜色
pie(rep(1,n),labels=mygray,col=mygray)
show_col(gray.colors(10),labels=T) #展示所有生成的颜色
pie(rep(1, n), labels=mygray, col=mygray) #通过饼图的形式来展示所有生成的颜色
上一篇下一篇

猜你喜欢

热点阅读