R筆記-1

只是個人的學習筆記
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")

但是運行的結果不會直接在窗口輸出顯示,但是其實是已經(jīng)運行了的,得到的變量都可以在r-studio中的environment中看到,或者在r中直接輸入變量名,可以看到結果。
如果想在窗口及時顯示運行結果,則需輸入

source(“/Lie-manuscript/old_桌面/picture.R", echo=TRUE)
  1. RStudio 支持三種同時執(zhí)行多行代碼的方式:
  • 選擇多行代碼,按下 Ctrl + Enter 鍵(或使用 Source 窗口標題欄上的 Run 按鈕)。
  • 在運行完某一段代碼后,按下 Ctrl + Shift + P 鍵(或對應的標題欄按鈕),即可重新運行上一次運行的代碼段(單行或多行)。該命令并不是簡單的讀取執(zhí)行的歷史來重新執(zhí)行,而是會把當前版本的代碼段重新執(zhí)行(即使和上一次相比已經(jīng)修改過了)。也就是說,重復執(zhí)行剛才執(zhí)行過的code,適用于code做了修改的情況。
  • 如要執(zhí)行整個文件,可以按下 Ctrl + Shift + Enter 鍵(或使用標題欄上的 Source 按鈕)。這樣做的好處是可以整個文檔會被保存為一個臨時文件,然后輸入 Console,在 Console 中的代碼不會被重新顯示一遍(選擇 Source with Echo 則會顯示)。
    原文鏈接:https://blog.csdn.net/qingchongxinshuru/article/details/52003704
  1. getwd( ) 函數(shù)來獲取當前工作路徑; setwd()設定當前工作路徑。需要注意的是,setwd()不會創(chuàng)建一個不存在的路徑,如果要新建文件夾,需要用dir.create()
  2. install.packages(‘data.table') 將安裝“data.table”這個包,update.packages() 更新包。
  3. 在Console中輸入help( )函數(shù),( )內輸入所要查詢的函數(shù),可以查看幫助。比如:help(mean)。或者直接在Console輸入?mean。
  4. 刪除已經(jīng)存儲的工作空間file.remove("~/Downloads/r-practice/.RData")
  5. .libPaths() #查看R package的安裝位置
  6. 載入已經(jīng)存在的數(shù)據(jù)包。data(pirates, package="yarrr")

20191020

  1. 平均值 mean()
    通常使用mean來計算樣本的均值,但均值往往會受到樣本中一些異常值的影響,因此需要去掉這部分數(shù)據(jù),此時我們就要用到mean的trim參數(shù)。
    trim的取值范圍為0到0.5之間,表示在計算均值前,需要在首尾分別去掉的異常值的比例。下面通過具體實例說明:


    mean函數(shù)中trim用法舉例.png

    如上圖所示,x是一個包含12個元素的矩陣,trim=0.083,意味著要在首尾分別去掉12 * 0.083=0.996個數(shù)據(jù)。如果是小數(shù),也就是這里的0.996,則取小數(shù)點前的,這里就是取0,也就是不去除數(shù)據(jù),所以平均值是8.75。當trim=0.093時,12 * 0.093=1.116,首尾各去除1個數(shù)字,也就是去掉0和50,平均值為5.5。如果trim=0.5,首尾各去除12*0.5=6個數(shù)字,但是結果還是5.5,這個我暫時也不太懂,先mark一下。


    image.png
  2. 標準差 sd()
  3. 相關 cor()
  4. data() 列出當前已加載包中所有可用示例數(shù)據(jù)集。
  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") 可以輸出某個包的簡短描述以及包中的函數(shù)名稱和數(shù)據(jù)集名稱的列表。
  5. R語言是區(qū)分大小寫的。
  6. 要了解某個函數(shù)的返回值,查閱這個函數(shù)的幫助文檔中的value部分即可。這樣就可以知道將某個函數(shù)的結果賦值到一個變量之后,保存下來的結果具體是什么。

20191021
R中的數(shù)據(jù)結構

R中的數(shù)據(jù)結構.png

  1. 向量
    向量是用于存儲數(shù)值型、字符型或邏輯型數(shù)據(jù)的一維數(shù)組。
    向量通過函數(shù)c()來創(chuàng)建。
a<-c(1,2,5,7,9) #數(shù)值型
b<-c("a","b","c","d","e") #字符型
c<-c(TRUE,FALSE,TURE,TURE,FALSE) #邏輯型,需要注意邏輯字符需要大寫。

訪問向量中的元素,需要使用中括號。這里跟matlab有區(qū)別,matlab是小括號。

> b[3]
[1] "c"
> b[c(2,4)]
[1] "b" "d"
> b[2:5]
[1] "b" "c" "d" "e"
a[a<]
  1. 矩陣
    矩陣是一個二位數(shù)組,也是數(shù)值型、字符型和邏輯型三種。
    讀取矩陣中的元素需要使用中括號和下標。
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()函數(shù)用來創(chuàng)建矩陣,c(1,2,3,4,5,6,7,8)代表數(shù)據(jù),nrow代表行數(shù),ncol代表列數(shù),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. 數(shù)組
    數(shù)組是三維數(shù)據(jù),通過array()函數(shù)創(chuàng)建。讀取數(shù)組數(shù)據(jù)依舊是通過中括號[]和下標。
> 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)是數(shù)組中的數(shù)據(jù),c(2,3,3)代表數(shù)組的維度,dimnames代表數(shù)組每個維度的名稱。
> 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. 數(shù)據(jù)框架
    類似于spss中數(shù)據(jù)的類型,不同的列可以包含不同模式的數(shù)據(jù)??梢哉f是R中做常用的數(shù)據(jù)結構。
    通過函數(shù)data.frame()來創(chuàng)建。
> 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行的數(shù)據(jù)
      n1 n2 n3
sub01  1  2  3
sub02  2  3  4
sub03  3  4  5
> g[,1:2] #讀取1到2列的數(shù)據(jù)
      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)]  #讀取第一列和第三列的數(shù)據(jù)
      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 #$符號可以直接指定讀取某一列的數(shù)據(jù)。
 [1]  2  3  4  5  6  7  8  9 10 11
> attach(g) # 將數(shù)據(jù)框g添加到R的搜索路徑中,后續(xù)可以直接調用某一列,不需要每次都寫g$n1,可以直接寫n1,如下一句代碼所示。
> n1
 [1]  1  2  3  4  5  6  7  8  9 10
> detach(g) #將數(shù)據(jù)框從搜索路徑移除。所以后面直接輸入n1,會報錯。
> n1
Error: object 'n1' not found
# 另一種方法是使用函數(shù)with(),此函數(shù)的局限是賦值僅在此函數(shù)的括號內{}生效。如果要在全局環(huán)境中都生效,需要使用賦值符號<<-替代符號<-
> 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中把類別型和順序型變量成為因子。
    用函數(shù)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中的數(shù)字存儲為字符f和m,1存儲為m,2存儲為f。
> sex22
 [1] m f f m m f m m f m
Levels: m f
> sex11<-factor(sex1) #將字符跟數(shù)字綁定在一起,即將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")) #如果要自己定義存儲的數(shù)值,則需要加上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()函數(shù)提供變量的信息
 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的概要。連續(xù)型會顯示最小值、最大值、中位數(shù)、平均值和第1第3四分位數(shù)。類別變量和順序變量會顯示各水平的頻數(shù)。
       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的數(shù)據(jù)類型中最為復雜的一種。是一些對象的有序集合。他可以包含向量、矩陣、數(shù)據(jù)框、甚至其他列表的組合。
    使用函數(shù)list()來創(chuàng)建列表:
> 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
如果需要引用列表中的對象,可以用雙中括號[]或者$,括號內和$后是對象的名稱。如果用中括號,對象名稱需要加引號。
$符號指定一個數(shù)據(jù)框或列表中的某些成分。
這里如果用單中括號,則表示只是輸出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
如果需要引用對象中的某一個數(shù)值,則如下:
> 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))
# 如果不寫對象名稱,則系統(tǒng)默認用數(shù)字表示,比如這個例子中,最后一個變量就用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
沒有對象名稱,用數(shù)字表示的這種情況,如果需要引用對象中的某一個數(shù)值,則需要用雙中括號來表示。其實就是可以看mylist2 自己展示出來的情況,左上角都會展示每一個對象該怎么引用。參見截圖
> mylist2[[4]][1,3]
[1] 4

截圖

截圖1

出于調試代碼的目的,可以把不需要顯示的代碼,用if (FALSE) {...}來表示,讓這些代碼被忽略,如果需要運行,則把FALSE改成TRUE。

數(shù)據(jù)讀取

  1. 從帶分隔符的文本文件導入數(shù)據(jù)
    使用 read.table() 函數(shù)來讀取。
> mydata7<-read.table("student.csv",header = TRUE,row.names="Last",sep=",") 
#student.csv指當前工作路徑下需要讀取的文件名,header = TRUE代表讀取標題欄,也就是把第一行讀取為標題。如果這里是FALSE,則第一行也作為數(shù)據(jù),標題就是默認的v1,v2這種的。sep=","是指數(shù)據(jù)之間是用逗號分割的,讀取時候按照逗號來讀取數(shù)據(jù)。row.names="Last"代表將Last這一列數(shù)據(jù)當作行名稱。
> 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文件導入數(shù)據(jù)
    首先需要載入3個R包。rJava xlsxjars xlsx
> library(rJava)
> library(xlsxjars)
> library(xlsx)
> mydata5<-read.xlsx("student.xlsx",header = TRUE,row.names="StudentID",1)
# 這里的數(shù)字1代表讀取excel第一個sheet的數(shù)據(jù)。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) #這里的數(shù)字2代表讀取第二個sheet的數(shù)據(jù)
> mydata2
 X1 X5 q
1  2  6 a
2  3  7 z
3  4  8 x
  1. 導入spss數(shù)據(jù)
    首先需要載入包 Hmisc,使用這個包中的spss.get函數(shù)來讀取數(shù)據(jù)。
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

實用函數(shù)

> length(mydata1) #顯示對象中元素/成分的數(shù)量
[1] 6
> dim(mydata1) #顯示某個對象的維度,也就是幾行幾列
[1] 4 6
> str(mydata1) #顯示某個對象的數(shù)據(jù)結構
'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) #顯示某個對象的類型(數(shù)組、數(shù)據(jù)框等)
[1] "data.frame"
> mode(mydata1) #顯示某個對象的模式
[1] "list"
> names(mydata1) #顯示某對象中各成分的名稱
[1] "StudentID"      "First"          "Last"           "Math"           "Science"       
[6] "Social.Studies"
> my<-cbind(mydata1,mydata3) #cbind按照列合并對象,也就是保持原來的行數(shù)不變,列數(shù)增加。
> 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按照行合并對象,也就是列數(shù)不變,行數(shù)增加
> 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行外的所有數(shù)據(jù),其實等價于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

R語言數(shù)據(jù)類型轉換

test for data type

is.numeric(), is.character(), is.vector(), is.matrix(), is.data.frame()

convert it
as.numeric(), as.character(), as.vector(), as.matrix(), as.data.frame)

圖形初階

  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":僅有線,但不連續(xù),在本應畫點的地方斷開了;·"o":即有點又有線,點與線相交,(overplot);·"h":抽象成高密度的直方圖;·"n":圖上沒有任何的點,即空圖,no plotting.
> abline(lm(mpg~wt)) # 給當前圖形窗口添加直線,lm(y~x),注意區(qū)分y和x。
> title("Regression of MPG on Weight") #添加圖形標題
> detach(mtcars)
> dev.off() #關閉圖形設備

2.dev類函數(shù)
詳情參考這篇博客
(1)函數(shù)功能:在多個圖形設備之間提供控制功能。
(2)使用:
·所有的關于圖形的操作都在一個設備中進行,即僅有一個設備是“活躍設備”;
·"空設備(null device)":總是打開的,起著占位作用;
·任何想使用空設備的操作,會導致另外一個設備被打開,一旦有其他設備被打開,則空設備不再是一個活躍設備了;
·設備可以有各自的名字,同時有編號,從1到63;
·空設備的編號始終是1;
注意:打開的設備,活躍設備,空設備的概念。
(3)dev.list():返回打開的設備的名單列表,但不包含空設備;
(4)dev.off():關閉指定的設備(缺省情況下為當前設備);當前設備被關閉后,若還有打開的設備,則緊接著的下一個打開的設備變?yōu)楫斍霸O備;
返回新打開的活躍設備的名字和編號。
注意:設備1是不能被關閉的,即對設備1進行關閉操作是錯誤的;
(5)graphics.off():關閉所有打開的設備;
(6)dev.set(): 指定一個特定的設備為活躍設備,但若沒有那個指定的設備,等同于dev.next();若指定設備的值為1,則打開一個新的設備,并且指定那個設備為活躍設備。
返回新設備的名字和編號。
(7)dev.new():打開一個新的設備。R中經(jīng)常根據(jù)需要自動的打開新的設備,但也能使用跨平臺的方式打開更多的設備;返回新設備的名字和編號。
(8)dev.cur():查看當前的活躍設備;返回包含當前活躍設備的名字和編號的向量;如果是返回值是1,空設備,即沒有活躍設備。
(9)dev.next():查看緊隨當前活躍進程的下一個進程;返回其名字和編號。
(10)dev.prev():查看當前活躍進程的前一個進程;返回其名字和編號。

如果需要畫多幅圖,新畫的圖會把之前的圖覆蓋掉。
可以通過dev.new()新建一個圖形窗口,再重新畫圖。

  1. hist()繪制直方圖
  2. 圖形參數(shù)
    設置圖形參數(shù)有兩種方式:
  • 使用par()函數(shù)來指定參數(shù)
## 輸入數(shù)據(jù)
> 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()函數(shù)指定的參數(shù)是直接修改圖形窗口的設置,也就是說,如果不修改的話,是對接下來所有的圖形都適用的。相當于修改的是全局。
> plot(dose,drugA,type="b") #這條命令就是用修改后的參數(shù)畫圖
> plot(dose,drugB,type="b") # 這條畫出的圖也是修改后的參數(shù)
> par(op) # At end of plotting, reset to previous settings恢復默認設置,也就是把自己剛才設置的參數(shù)還原回原始的,這樣接下來在畫圖就是默認設置了。
> plot(dose,drugB,type="b") #這條命令畫出的圖就是默認的設置,不是之前設置的虛線,實心三角形了。
> dev.off() #關閉圖形窗口
  • 直接在繪圖時聲明參數(shù)
## 這樣繪圖的參數(shù)設置就僅僅是針對當前的圖形適用,而不會影響后續(xù)的畫圖。
> plot(dose,drugA,type="b",lty=2,pch=17)

我個人認為如果是每個圖的設置不同,可以通過直接聲明的方式,而如果是有統(tǒng)一的格式要求,一開始通過par()函數(shù)指定,會更方便。

一些常用的參數(shù):符號和線條

用于指定符號和線條類型的常用參數(shù)

參數(shù)pch可指定的繪圖符號詳解

參數(shù)lty可指定的線條類型

繪圖顏色


用于指定顏色的參數(shù)

在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中有許多函數(shù)可以用來創(chuàng)建連續(xù)型顏色向量,例如 rainbow() 可以生成n種連續(xù)的彩虹型顏色, heat.colors(), terrain.colors(), topo.colors(), brewer.pal(n,name) 以及 cm.colors()。
brewer.pal(n,name) 是很常用的用來創(chuàng)建吸引人的顏色配對的函數(shù)。需要首先載入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重復數(shù)字,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(xiàn)就是不顯示,默認是顯示.
> 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()函數(shù)畫餅圖,rep(1,n)數(shù)據(jù),labels標簽也就是顏色的文字名稱,col用來指定名稱對應的顏色。

灰度色需要通過gray()函數(shù)來生成,通過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) #通過餅圖的形式來展示所有生成的顏色
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容