R語言實戰之圖形初階(三)

第3章 圖形初階

主要內容:

圖形的創建與保存;

自定義符號、線條、顏色和坐標軸;

標註文本和標題

控制圖形維度

3.1使用圖形

R是一個驚艷的圖形構建平台,在交互會話中,可以逐條輸入語句構建圖形,逐漸完善圖形特徵。

> attach(mtcars)n> plot(wt,mpg)n> abline(lm(mpg~wt))n> title("Regression of MPG on Weight")n> detach(mtcars)n

>attach(mtcars) 綁定了數據框mtcars

>plot(wt,mpg)打開了一個窗口並生成了一個散點圖,橫軸表示wt,車身重量,縱軸表示每加侖有行駛 的英里數。

>abline(lm(mpg~wt))向圖添加了一條最優擬合曲線。

>title("Regression of MPG on Weight")添加了標題

>detach(mtcars)為數據解除數據框。

以下代碼可以將圖形保存到目錄名為mygraph.dpf的PDF文件中:

> pdf("mygraph.pdf")n> attach(mtcars)n> plot(wt,mpg)n> abline(lm(mpg~wt))n> title("Regression of MPG on Weight")n> detach(mtcars)n> dev.off()n

通常執行plot()、hist()和boxplot()這樣的高級圖形命令來創建一副新圖形時候,通常會覆蓋之前的圖形。創建多個圖形的方法如下:

  1. 在創建一幅新圖形的之前打開一個新的圖形窗口:

dev.new()nstatements to create graph1ndev.new()nstatements to create graph2netc.n

2.可以通過圖形用戶界面來查看多個圖形。

在windows上,(1)打開第一個圖形窗口以後,勾選 histor>recording;(2)使用菜單的previous>next 逐個查看已經繪製的圖形。

3.使用dev.new() 、dev.nexr() 、 dev.pre() 、dev.set() 、dev.off()同時打開多個圖形窗口,選擇將哪個輸出發送到哪個窗口。

我們可以指定圖形的字體,顏色,坐標軸等,靈活度使得我們實現高度定製。

3。2一個簡單的例子

> dose<-c(20,30,40,45,60)n> drugA<-c(16,20,27,40,60)n> drugB<-c(15,18,25,31,40)n> plot(dose,drugA,type="b")n

藥物A劑量響應的點線圖

plot()函數是R中的一個泛型函數(它的輸出將根據所繪製對象類型的不同而變化)

plot(x,y,type="b")將y置於縱軸,x橫軸,繪製點集(x,y)。

type="b"表示同時繪製點和線。

3。3圖形參數

通過改 圖形參數 的選項來自定義一副圖形的多個特徵。

通過函數par()完成,格式為

par(optionname=value,optionname=name,...)n

假設我們點符號使用實心三角,虛線代替實線,命令如下:

> opar<-par(no.readonly = TRUE) #複製當前的圖形參數設置n> par(lty=2,pch=17) #將默認線條改為虛線,符號改為實心三角n> plot(dose,drugA,type="b")n> par(opar)n

第二種方法實現上述圖形:

> plot(dose,drugA,type="b",lty=2,pch=17)n

3。3。1符號與線條

指定符號和線條類型的參數

pch 繪製點的符號

cex 指定符號大小。(默認值為1)

lty 指定線條類型

lwd 指定線條寬度(默認值為1)

應用:

> plot(dose,drugA,type = "b",lty=3,lwd=3,pch=15,cex=2)n

3.3.2 顏色

用於指定顏色的參數

col tt默認的繪圖顏色

col.axistt坐標軸刻度文字顏色

col.labtt坐標軸標籤顏色

col.maintt標題顏色

col.subtt副標題顏色

fgttt圖形前景色

bgttt圖形的背景色

gray(0:10/10)將生成10階灰度色。

代碼:

> n<-10n> mycolors<-rainbow(n)n> pie(rep(1,n),labels = mycolors,col=mycolors)n

> n<-10n> mygrays<-gray(0:n/n)n> pie(rep(1,n),labels = mygrays,col=mygrays)n

3。3。3文本屬性

圖形參數同樣可以用來指定字型大小、字體、和字樣。

例如:

> par(font.lab=3,cex.lab=1.5,font.main=4,cex.main=2)n

創建斜體、1.5倍於默認文本大小的坐標軸標籤的名稱,以及粗體斜體,2倍於默認文本大小的標題

3。3。4圖形尺寸和圖形邊界

pin 以英寸表示圖形的尺寸

mai 以數值表示邊界大小(單位 )

使用之前所學的所有的選項來強化之前的簡單的圖形示例:

代碼3-1 使用圖形參數控制圖形外觀

> dose<-c(20,30,40,45,60)n> drugA<-c(16,20,27,40,46)n> drugB<-c(15,18,25,31,40)n> opar<-par(no.readonly = TRUE)n> par(pin=c(2,3))n> par(cex.axis=.75,font.axis=3)n> plot(dose,drugA,type = "b",pch=19,lty=2,col="red")n> plot(dose,drugB,type = "b",pch=23,lty=23,col="blue",bg="green")n> par(opar)n

3。4添加文本、自定義坐標軸和圖例

除了圖形參數,很多的高級繪圖函數(plot、 hist 、boxplot)也允許自行設定坐標軸和文本標註選項。

以下代碼添加了,標題(main),副標題(sub),坐標軸標籤(xlab ylab)並指定了坐標軸範圍(xlim,ylim)

> plot(dose,drugA,type="b",col="red",lty=2,pch=2,lwd=2, main="Clinical Trials for Drug A",n+ sub="This is hypothetical data", xlab="Dosage",ylab="Drug Response",n+ xlim=c(0,60),ylim=c(0,70))n

注意:

1。並非所有函數都支持這些選項,需要提前查明。

2。某些高級繪圖函數已經包含了默認的標題和標籤。可以通過plot()或者par()語句中添加 ann=FALSE來移除他們。

3。4。1標題

使用title()函數來為圖形添加標題和坐標軸標籤。

格式為:

title(main="main title",sub="sub-titles",xlab="x-axis label",ylab="y-axis label")n

3。4。2坐標軸

你可以使用函數axis( )來創建自定義的坐標軸,而非使用R中的默認坐標軸,

格式:

axis(side,at=,labels=,pos=,lty=,col=,las=,tck=,...)n

坐標軸選型:

side:一個整數,表示在圖形的哪邊繪製坐標軸

at:一個數值型向量,表示需要繪製刻度線的位置

labels:一個字元型向量,表示置於刻度線旁邊的文字標籤(若為NULL,則將直接使用at中的值)

pos:坐標軸線繪製位置的坐標

lty:線條類型

col:線條和刻度線顏色

las:標籤是否平行(=0)或垂直於(=2)坐標軸

tck:刻度線的長度,以相對於繪製區域大小的額分數表示

代碼3-2 自定義坐標軸的示例

y<-c(1:10)ny<-xnz<-10/xnnopar<-par(no.readonly = TRUE)nnpar(mar=c(5,4,4,8)+0.1)nnplot(x,y,type="b",pch=21,col="red",yaxt="n",lty=3,ann=FALSE)nnlines(x,z,type = "b",pch=22,col="blue",lty=2)nnaxis(2,at=x,labels = x,col.axis="red",las=2)nnaxis(4,at=z,labels = round(z,digits = 2),col.axis="blue",las=2,cex.axis=0.7,tck=-.01)nnmtext("y=1/x",side=4,line = 3,cex.lab=1,las=2,col="blue")nntitle("An Example of Creative Axes",xlab="X values",ylab="Y=X")nnpar(opar)n

lines()語句會為現有圖形添加新的圖形元素

metext()函數用於在圖形的邊界添加文本

  • 次要刻度線

創建次要刻度線,需要使用Hmisc包中的minor.tick()函數。

3。4。3參考線

函數abline()可以用來為圖形的添加參考線。

格式:

abline(h=yvalues,v=xvalues)n

函數abline()也可以指定其他圖形的參數(如線條,顏色,寬度)

例如:

abline=(h=c(1,5,7))n

在y為1,5,7的位置添加了水平線

3。4。4圖例

函數legend()來添加圖例:

格式:

legend(location,title,legend,...)n

location 指定圖例的位置

title 圖例標題的字元串

legend 圖例標籤組成的字元型向量

代碼3-3 依劑量對比藥物A和藥物B 的響應情況

dose<-c(20,30,40,45,60)ndrugA<-c(16,20,27,40,60)ndrugB<-c(15,18,25,31,40)nnopar<-par(no.readonly = TRUE)nnpar(lwd=2,cex=1.5,font.lab=2)nnplot(dose,drugA,type="b",pch=15,lty=1,col="red",ylim = c(0,60),main = "Drug A vs.Drug B",xlab="Drug Dosage",ylab="Drug Response")nnlines(dose,drugB,type="b",pch=17,lty=2,col="blue")nnabline(h=c(30),lwd=1.5,lty=2,col="gray")nnlibrary(Hmisc)nminor.tick(nx=3,ny=3,tick.ratio = 0.5)nnlegend("topleft",inset = .05,title = "Drug Type",c("A","B"),lty=c(1,2),pch=c(15,17),col=c("red","blue"))nnpar(opar)n

3。4。5文本標註

函數text( )和mtext( )將文本添加到圖形上,text( )可向繪圖區域內部添加文本,而mtext()是向圖形的四個邊界之一添加文本。

格式:

text(location,"text to place",pos,...)nmtext("text to place",side,line=n,...)n

location t文本的參數位置。

pos tt文本相對於位置參數的方位

side tt指定用來放置文本的邊。

cex 調整字型大小

col 顏色

font 字體樣式

除了能添加標註以外,text()函數也通常用來標示圖形中的點。

代碼示例一:

attach(mtcars)nplot(wt,mpg,main="Mileage vs.Car Weight",xlab = "Weight",ylab = "Mileage",pch=18,col="blue")ntext(wt,mpg,row.names(mtcars),cex = 0.6,pos = 4,col="red")ndetach(mtcars)n

代碼示例二:(windows中不同字體族的示例)

opar<-par(no.readonly = TRUE)npar(cex=1.5)nplot(1:7,1:7,type = "n")ntext(3,3,"Example of default text")ntext(4,4,family="mono","Example of mono-spaced text")ntext(5,5,family="serif","Example of serif text")npar(opar)n

3。5圖形的組合

創建四幅圖像的代碼:

attach(mtcars)nopar<-par(no.readonly = TRUE)npar(mfrow=c(2,2))nplot(wt,mpg,main="Scatterplot of wt vs.mpg")nplot(wt,disp,main="Scatterplot of wt vs disp")nhist(wt,main = "Histogram of wt")nboxplot(wt,main="Boxplot of wt")npar(opar)ndetach(mtcars)n

通過par(mfrow=c(2,2)組合的四幅圖形)

示例二:

attach(mtcars)nopar<-par(no.readonly = TRUE)npar(mfrow=c(3,1))nhist(wt)nhist(mpg)nhist(disp)npar(opar)ndetach(mtcars)n

通過par(mfrow=c(3,1))組合的三幅圖

示例三:

attach(mtcars)nlayout(matrix(c(1,1,2,3),2,2,byrow = TRUE))nhist(wt)nhist(mpg)nhist(disp)ndetach(mtcars)n

通過函數layout()組合的三幅圖形,各寬度為默認值

示例四:

attach(mtcars)nlayout(matrix(c(1,1,2,3),2,2,byrow=TRUE),widths=c(3,1),heights=c(1,2))nhist(wt)nhist(mpg)nhist(disp)ndetach(mtcars)n

使用函數layout()組合的三幅圖形,各列寬度為指定值。

  • 圖形布局的精細控制

使用fig=對圖形布局實現精細的控制能力

代碼3-4 多幅圖形布局的精細控制

opar<-par(no.readonly = TRUE)npar(fig=c(0,0.8,0,0.8)) #設置散點圖nplot(mtcars$wt,mtcars$mpg,xlab = "Miles Per Gallon",ylab = "Car Weight")npar(fig=c(0,0.8,0.55,1),new=TRUE)t#在上方添加箱線圖nboxplot(mtcars$mpg,axes=FALSE)t #在右上方添加箱線圖nnmtext("Enhanced Scatterplot",side = 3,outer=TRUE,line = -3)npar(opar)n

邊界上添加了兩幅箱體線的散點圖

聲明:

以上筆記來自

《R語言實戰》 【美】Robert I.Kabacoff 著 高濤 肖楠 陳鋼 譯 人民郵電出版社


推薦閱讀:

有哪些數據分析師的博客或網站值得推薦?
折線+柱狀=雙軸圖?原來如此簡單、直觀!
老闆找你談心怎麼辦?
現在是否有社會化媒體營銷的數據分析工具?
一文教你輕鬆上手數據分析神器,從此變身數據達人!

TAG:R编程语言 | 数据分析工具 | R |