由於R語言基礎作圖部分內容簡單直接,但引數繁多,因此這裡不做系統介紹,只挑出幾個點來講一講。主要介紹R中的顏色系統。
目錄
一個作圖示例
圖片的高畫質儲存
par函式使用技巧
顏色系統
作圖使用中文亂碼
基礎作圖和數學公式的演示
一個作圖示例
下面我們要畫出以上圖片,當做一些函式和引數使用的例子,程式碼中的註釋會對一些內容作出解釋。
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函式增加儲存的圖片的清晰度。
我們要畫以下這張圖
下面是探索過程:
註釋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有以下自帶顏色集
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)
# 作圖結果見下方
自己製作漸變色集
自己製作漸變色可以使用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)
調色盤的作用是便捷、快速地使用,我們可以對其進行更改,使用我們自己喜歡的顏色。
# 讀者自己嘗試
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所在資料夾