由於R語言基礎作圖部分內容簡單直接,但引數繁多,因此這裡不做系統介紹,只挑出幾個點來講一講。主要介紹R中的顏色系統。

目錄

一個作圖示例

圖片的高畫質儲存

par函式使用技巧

顏色系統

作圖使用中文亂碼

基礎作圖和數學公式的演示

一個作圖示例

R|基礎繪圖

下面我們要畫出以上圖片,當做一些函式和引數使用的例子,程式碼中的註釋會對一些內容作出解釋。

x <- 1:5

y <- 5:1

# 生成25個點的網格資料

xy <- expand。grid(y=y,x=x)

# 畫25種pch

plot(xy$x-6,xy$y,pch=1:25,col=“red”,cex=2,

xlim=c(-5。5,6),ylim=c(-7,6), # 指定座標軸範圍

ann=F,axes=F) # 這兩個引數去掉原有邊框

text(3-6,6,“points pch=”)

text(xy$x+0。4-6,xy$y,as。character(1:25))

# 畫6種lty

for(i in 1:6){

lines(1:5-6,rep(i*5/6,5)-7,lty=i,col=“red”,lwd=2)

}

text(3-6,6-7,“lines lty=”)

text(rep(5。35,6)-6,1:6*5/6-7,as。character(1:6))

# 畫8種type

a <- 1:3

b <- -(1:3/4)

typen <- c(“h”,“p”,“l”,“b”,“o”,“S”,“s”,“n”) # n指不畫線

for(i in 1:length(typen)){

points(a,b-0。8*i,type=typen[i],col=i+1)

text(0。5,-0。2-0。8*i,typen[i],col=i+1)

}

# 畫透過原點的座標軸

axis(1,c(-5,0,6),pos=0, # 確定軸的座標為0

col。ticks = “transparent”,col=“grey”,col。axis=“grey”,

hadj=-1,padj=-1。5) # 調整刻度名與軸之間的距離

axis(2,c(-7,0,6),pos=0,

col。ticks = “transparent”,col=“grey”,col。axis=“grey”,

hadj=1,padj=1。5)

# 畫各種圖形

segments(0。5,5,2。5,5,col=2) # 指定首尾座標

text(6,5,“segments(0。5,5,2。5,5)”,adj=1) # adj=1則文字最左端對應前面指定的座標

arrows(0。5,4,2。5,4,col=3)

text(6,4,“arrows(0。5,4,2。5,4)”,adj=1)

rect(0。5,2。7,2。5,3。3,col=“transparent”,border=4) # 顏色可以設為無色

text(6,3,“rect(0。5,2。7,2。5,3。3)”,adj=1)

polygon(c(0。5,2。5,2。5,0。5),c(1。6,1。6,2。4,2。4), # 自動封閉填充顏色

col=“grey”,border=5) # 畫多邊形

text(6,2,“polygon”,adj=1)

legend(“bottomright”,c(“segments”,“arrows”,“rect”,“polygon”),

text。col=2:5,lty=1,pch=16,col=2:5,bg=“grey”,title=“legend”)

圖片的高畫質儲存

圖片儲存分為兩種,一種是plot之後手動儲存,一種是透過程式碼命令儲存。

透過程式碼儲存有如下兩個好處

如果一次要迴圈畫出多張圖片,同時儲存下來,透過程式碼儲存可以實現自動化,大大減少工作量。

透過程式碼儲存還可以指定圖片清晰度。

程式碼儲存方式

儲存圖片的命令分為兩個系統

png bmp jpeg tiff 函式是一類

pdf 函式是一類

這5個函式儲存完的圖片都以函式名為字尾名。

函式的使用格式是這樣的

png(“1。png”,width=600,height=600) # 指明接下來要做的圖形的格式和長寬

plot(x,y)

dev。off() # 關閉圖形裝置

這樣做完圖,不會顯示在R語言視窗中,而是當前資料夾中會出現一個 1。png 圖片。

清晰度說明

pdf函式儲存完是pdf格式,是一張向量圖,放大縮小不影響清晰度,在使用latex時,可以直接將其作為圖片匯入pdf。

而很多時候匯入圖片不能使用pdf格式,只能用png等函式,不過這些函式儲存出來的圖片清晰度往往難以令人滿意。

下面我們就來說一說如何用png函式增加儲存的圖片的清晰度。

我們要畫以下這張圖

R|基礎繪圖

下面是探索過程:

註釋1:最開始我們嘗試將height和width同比例放大,發現圖很大文字很小。

註釋2:檢視png函式的文件,發現res引數可以改變畫素,我們增加res試一試,發現文字很大,圖變小了小。而且res不能太大,否則就會報錯。

目前程式碼:我們把height width和res增大同樣比例試一試。發現圖片正常,而且清晰度提高了

typei <- c(“p”,“l”,“b”,“o”,“c”,“h”,“S”,“s”,“n”)

# png(“type。png”,width=600,height=600) # 原始程式碼

# png(“type。png”,width=600*3,height=3*600) # 註釋1

# png(“type。png”,width=600,height=600,res=72*2) # 註釋2

png(“type。png”,width=600*3,height=3*600,res=72*3)

# pdf(“type。pdf”,height=14)

opar <- par(mfrow=c(3,3))

for(i in 1:length(typei)){

plot(1:10,1:10,type=typei[i],xlab=“”,ylab=“”,

main=paste(‘type=“’,typei[i],‘”’))

}

dev。off()

par(opar)

par函式使用技巧

讀者看到上面的這兩條命令可能會覺得奇怪

opar <- par(mfrow=c(3,3))

par(opar)

本來只要

par(mfrow=c(3,3))

全域性設定一下就可以了,但是如果這樣的話,以後畫圖都會分成9宮格。使用上面那種形式是為了畫完圖還原之前的引數,不影響後面的作圖。

除了par函式,還有options函式也是如此

op <- options(digits = 2)

(a <- 1。34556) # 1。3

options(op)

(a <- 1。34556) # 1。34556

顏色系統

一個展示顏色的程式

為了更方便地展示顏色,我們先定義一個展示顏色的函式showcolors,以後我們都會用這個函式來展示顏色。

# 預設輸入顏色不超過10個,放在一排排列展示,超過10個使用方格展示

# 如果引數style=“line”則放在一排排列展示,style=“grid”則用方格顯示

showcolors <- function(colors,style=“two”){

funv <- list(

# 少量顏色展示,一排展示

showcol1 = function(color){

l1 <- seq_along(color) # 只要將顏色向量賦值給color,就能用柱狀圖展示

image(l1,1,as。matrix(l1),col=color,

ylab=“”,xlab=“”,yaxt=“n”,xaxt=“n”,bty=“n”)

},

# 大量顏色使用方格顯示

# 顏色向量的排列順序為,從上到下,從左到右排列

showcols = function(color){

l <- length(color)

x <- ceiling(sqrt(l))

image(1:x,1:x,matrix(1:(x^2),nrow=x)[,x:1],

col=c(color,rep(ifelse(is。character(color),“white”,0),x^2-l)),

ylab=“”,xlab=“”,yaxt=“n”,xaxt=“n”,bty=“n”)

})

l <- length(colors)

# 引數選擇

# 使用$或[[]]呼叫閉包函式

switch(style,

“line”=funv$showcol1(colors),

“two”=funv[[ifelse(l<=10,“showcol1”,“showcols”)]](colors),

“grid”=funv$showcols(colors)

}

# 例項

mycolor <- colors()[1:30]

showcolors(mycolor)

showcolors(mycolor,“line”)

R語言顏色系統

呼叫顏色有一下幾種方法

使用顏色名稱

指定rgb或者用3位十六進位制數、或hsv

使用系統自帶顏色集

自己製作漸變色集

使用顏色包RColorBrewer包

使用數字

使用顏色名稱

使用字串代表顏色,如 “red”,”black”等。這樣R語言自帶的可以使用的字串共有657個,具體顏色與名稱對應見chart of r colors

# 用如下命令看顏色的演示

demo(“colors”)

# colors()代表一個長為657的顏色字串向量

length(colors()) # 657

colors()[30:35] # “blue4” “blueviolet” “brown” “brown1” “brown2” “brown3”

# 當你想得到多種紅色,可以用下面程式碼

colors()[grep(“red”,colors())]

# 看看有哪些顏色(讀者自試)

showcolors(colors()[grep(“red”,colors())])

指定rgb或者用3位十六進位制數、或hsv

如果系統自帶的顏色不令人滿意,我們可以自己指定顏色的rgb。

rgb函式接的引數分別對應 r-red,g-green,b-blue,生成的顏色是由這三個顏色組成

(如果rgb函式接了四個引數,則第四個表示透明度,如果一個繪圖函式沒有alpha引數調節透明度,可以這樣在rgb函式中調節)

hsv 是Hue, Saturation, Value色調、飽和度、亮度。是繪圖的另外一套系統

# 預設三個數在0-1之間

color <- rgb(1,0。5,0。25)

# 由於我們平常使用的rgb都是0-255,我們可以這樣

color <- rgb(35,255,76,maxColorValue=255)

# 三個引數接向量可以做出一個顏色向量

color <-rgb(seq(1,255,len=10),16:25,16:25,maxColorValue=255)

showcolors(color)

# 用rgb生成的函式以3個16進位制數的字串表示

# 我們平時去找顏色的時候,有時也能見到這種格式,其實和rgb是等價的,不過用起來更方便

color[1:4] # “#011010” “#1D1111” “#391212” “#551313”

# hsv

mycolor <- hsv(seq(0,0。5,len=10),1:10/15,1:10/10)

showcolors(mycolor)

# 也是用十六進位制表示

mycolor[1:4] # “#1A1818” “#332E2C” “#4D473D” “#66664B”

# 提取顏色rgb數值

col2rgb(“yellow”)

R|基礎繪圖

使用系統自帶顏色集

R有以下自帶顏色集

rainbow() 彩虹色

heat。colors() 紅色至黃色

terrain。colors() 綠色、棕色至白色

topo。colors() 深藍色至淺棕色

cm。colors() 淺藍到白色、淺紫色

gay()和grey() 灰色

前5個函式接受單個數值作為引數,生成漸變色,數值越大,相鄰顏色差別越小

最後一個函式接受一個數值向量,數值為0-1之間

# 簡單示例,作圖由讀者自試

mycolor <- heat。colors(10)

showcolors(mycolor)

# fss中每一個元素作為fun的引數,執行fun函式的命令

fun <- function(f){

showcolors(do。call(f,list(30)),“line”)

mtext(f,side=3,line=-1)

}

fss <- c(‘rainbow’,‘heat。colors’,‘terrain。colors’,‘topo。colors’,‘cm。colors’)

op <- par(mfrow=c(3,2),mar=rep(0。2,4))

lapply(fss,fun)

# gray函式接受引數的模式和三種不同

showcolors(gray(1:30/30),“line”)

mtext(“gray”,side=3,line=-1)

par(op)

# 作圖結果見下方

R|基礎繪圖

自己製作漸變色集

自己製作漸變色可以使用rgb和hsv函式,也可以使用下面一個函式,指定顏色的漸變

# 下面函式可以建立從一個顏色到另一個顏色的漸變色

a <- colorRampPalette(c(“red”, “purple”))

showcolors(a(20),“line”)

# 可以接受多個顏色漸變

a <- colorRampPalette(c(“green”,“blue”,“red”, “purple”))

showcolors(a(40),“line”)

使用顏色包RColorBrewer包

這個包中有三類顏色,個人認為非常好看

seq類,漸變。適用於從低到高排序明顯的資料,淺色數字小,深色數字大

div類,對對極值和中間值比較注重的資料

qual類,適用於分類

library(RColorBrewer)

# 展示所有顏色

display。brewer。all(type = “all”) # type可以換為“qual”,“div”,“seq”

# 使用顏色

mycolors<-brewer。pal(7,“Set1”) # 從這個色板中選擇7個顏色

display。brewer。pal(n, “RdGy”) # 展示這個調色盤中的顏色

brewer。pal。info # 檢視有哪些調色盤

使用數字

數字來表示顏色應該是我們平時最常用的方法了,但是最後講,是因為它涉及到調色盤,我們可以將前面所有顏色放進這個調色盤中,定義自己的數字對應顏色。所以等所有顏色都講完了才講這裡。

數字對應的顏色在調色盤中,我們可以用 palette 調出檢視,發現有8種預設顏色,對應數字1-8。

palette() # “black” “red” “green3” “blue” “cyan” “magenta” “yellow” “gray”

op <- par(mfrow=c(1,2),mai=rep(0。2,4))

showcolors(1:8)

showcolors(1:16)

par(op)

R|基礎繪圖

調色盤的作用是便捷、快速地使用,我們可以對其進行更改,使用我們自己喜歡的顏色。

# 讀者自己嘗試

palette(rainbow(10))

showcolors(1:10)

mycolor <- colors()[1:30]

palette(mycolor)

showcolors(1:10)

# 將調色盤設回預設

palette(“default”)

showcolors(1:10)

作圖使用中文亂碼

載入showtext包,詳情看這裡)

基礎作圖和數學公式的演示

demo(graphics)

demo(plotmath)

參考文獻

R顏色1

R顏色2

在這裡

推薦

幾個配圖網站

色輪自己調

美麗的顏色

搜尋配色

專欄資訊

專欄主頁:Data Analysis

專欄目錄:目錄

文末彩蛋

此處介紹幾個使用Rstudio的技巧

快捷鍵ctrl+shift+C——將選中的程式碼批次註釋,便於除錯程式

快捷鍵ctrl+shift+P——執行剛剛執行的指令碼區域,便於除錯程式(比如在使用一個函式,需要不斷嘗試調整引數,調一次,使用這個快捷鍵一次就可以重新執行,而不用再全選)

Rstudio建立project——file-new project-new-directory-empty project 然後選擇位置就建立成功。每次進入這個資料夾點選project那個檔案。有如下優點

將不同方向的內容放在不同project中執行,相互之間不干擾

可以儲存這個project中的所有歷史資訊

工作目錄自動設定在這個project所在資料夾