R語言學習筆記(五)繪圖(1)


  R是一個驚艷的圖形構建平台,這也是R語言的強大之處。本文將分享R語言簡單的繪圖命令。

  本文所使用的數據或者來自R語言自帶的數據(mtcars)或者自行創建。

  首先,讓我們來看一個簡單例子:

dose <- c(20, 30, 40, 45, 60)
drugA <- c(16,20,27,40,60)
plot(dose, drugA)

繪制的圖形如下:

![這里寫圖片描述](http://img.blog.csdn.net/20180116212628077?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
  我們有必要對上述代碼做些說明:首句和第二條語句創建兩個向量,第三條語句打開一個圖形窗口並生成一幅散點圖。
  這也許是個極為簡單的例子,因為並沒有涉及到太多其他關於圖形參數(如符號與線條,顏色,文本屬性,圖形尺寸和邊界大小等)方面的知識。接下來,我們將在此基礎上講講圖形參數的設置。

1.1 符號與線條

if(FALSE){該例展示如何利用par函數修改圖形參數}
dose <- c(20, 30, 40, 45, 60)
drugA <- c(16,20,27,40,60)
if(FALSE){no.readonly=TRUE可以生成一個可以修改的當前圖形參數列表}
opar <- par(no.readonly = TRUE)
if(FALSE){虛線+實三角}
par(lty=2, pch=17)
if(FALSE){b表示繪制點和線}
plot(dose, drugA, type="b")
par(opar)

繪制的圖形如下:

![這里寫圖片描述](http://img.blog.csdn.net/20180116212709904?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
上述代碼中的圖形參數設置也可以通過鍵值對來實現,並不需要par()函數,如下:
```R dose <- c(20, 30, 40, 45, 60) drugA <- c(16,20,27,40,60) plot(dose, drugA, type="b",lty=2,pch=17) ```   可以設置的符號和線條的參數有:
  • pch:繪制點時使用的符號(范圍:0~25);
  • cex:繪制符號的大小(默認值為1);
  • lty:線條類型(范圍1~6);
  • lwd:線條寬度(默認值為1);

1.2 顏色

  R語言圖形的顏色參數常用如下:

  • col:默認繪圖顏色;
  • col.axis:坐標軸刻度文字的顏色;
  • col.lab:坐標軸標簽的顏色;
  • col.main:標題的顏色;
  • col.sub:副標題的顏色;
  • fg:圖形的前景色;
  • bg:圖形的背景色;

  在R中,可以通過顏色下標、顏色名稱、十六進制的顏色值、RGB值或HSV值來指定顏色。例如,col=1,col="white",col="#FFFFFF",col=rgb(1,1,1)和col=hsv(0,0,1)都表示白色。

  示例代碼:

dose <- c(20, 30, 40, 45, 60)
drugA <- c(16,20,27,40,60)
opar <- par(no.readonly = TRUE)
par(lty=2,pch=17,col.axis=2,fg=rgb(0,0,1),bg='gray')
plot(dose,drugA,type="b")
par(opar)

繪制的圖形如下:

![這里寫圖片描述](http://img.blog.csdn.net/20180116212755086?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

1.3 文本屬性

  R語言圖形的文本大小參數如下:

  • cex:相對於默認大小縮放倍數的數值;
  • cex.axis:坐標軸刻度文字的縮放倍數;
  • cex.lab:坐標軸標簽的縮放倍數;
  • cex.main:標題的縮放倍數;
  • cex.sub:副標題的縮放倍數;
  R語言圖形的字體族、字號和字樣的參數如下:
  • font:繪圖時使用的字體樣式(整數,范圍:1~5);
  • font.axis:坐標軸刻度文字的字體樣式;
  • font.lab:坐標軸標簽的字體樣式;
  • font.main:標題的字體樣式;
  • font.sub:副標題的字體樣式;
  • ps:字體磅數(最終大小為:ps*cex)
  • family:繪制文本時使用的字體族;
  示例代碼:
dose <- c(20, 30, 40, 45, 60)
drugA <- c(16,20,27,40,60)
opar <- par(no.readonly = TRUE)
par(lty=2,pch=17,cex.axis=2, font.lab=4 )
plot(dose,drugA,type="b")
par(opar)

繪制的圖形如下:

![這里寫圖片描述](http://img.blog.csdn.net/20180116212824928?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

1.4 圖形尺寸和邊界大小

  R語言圖形的控制圖形尺寸和邊界大小參數如下:

  • pin:以英寸表示的圖形尺寸(寬和高);
  • mai:數值向量表示邊界大小,順序為“下左上右”,單位為英寸;
  • mar:數值向量表示邊界大小,順序為“下左上右”,單位為英分;
  示例代碼:
dose <- c(20, 30, 40, 45, 60)
drugA <- c(16,20,27,40,60)
opar <- par(no.readonly = TRUE)
par(pin=c(3,2))
plot(dose,drugA,type="b")
par(opar)

繪制的圖形如下:

![這里寫圖片描述](http://img.blog.csdn.net/20180116212912294?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
  接下來的部分雖然不屬於圖形參數,但對於圖形來說依然十分重要!為了保持敘述流暢,將沿用上面的序號。

1.5 坐標軸、標題

  R語言的圖形坐標軸選項如下:

  • xlab:x軸標簽;
  • ylab:y軸標簽;
  • xlim:x軸范圍;
  • ylim:y軸范圍;
  標題選項如下:
  • main:主標題;
  • sub:副標題;
  • title():函數,可添加坐標軸標簽和標題;
  示例代碼:
dose <- c(20, 30, 40, 45, 60)
drugA <- c(16,20,27,40,60)
plot(dose,drugA,type="b",
     xlab='x:dose',ylab='y:drugA',
     xlim=c(20,60),ylim=c(15,60),
     main='drugA over dose',sub='As exmaple')

繪制的圖形如下:

![這里寫圖片描述](http://img.blog.csdn.net/20180116212944512?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

1.6 自定義坐標軸、文本標注、參考線

  自定義坐標軸(axis)的參數如下:

  • side:1=下,2=左,3=上,4=右;
  • at:數值型向量,表示繪制刻度線的位置;
  • labels:字符型向量,表示刻度線旁邊的文字標簽;
  • pos:坐標軸線繪制位置的坐標;
  • lty:線條類型;
  • col:線條和刻度線的顏色;
  • las:標簽是否平行於(=0)或垂直於(=2)坐標軸
  • tck:刻度線的長度;
  • ...
  R語言的文本標注有text()和mtext(),其中text()可向繪圖區域內部添加文本,mtext()則向圖形的四個邊界之一添加文本,它們的參數如下
  • location:文本的位置參數,可用(x,y)坐標,也可交互式添加;
  • pos:文本相對於位置參數的方位,1=下,2=左,3=上,4=右。
  • side:放置文本的邊,1=下,2=左,3=上,4=右;
其他常用的選項有cex,col和font(分別來調整字號、顏色和字體樣式)。R語言還支持數學標注,標注語法類似於Tex.
  參考線的函數為abline(),語法為:
abline(h=yvalues, v=xvalues)

abline()中也可以指定其它圖形參數,如線條類型、顏色和寬度。

  示例代碼:

x <- c(1:10)
y <- x
z <- 10/x
opar <- par(no.readonly = TRUE)
if(FALSE){邊界大小}
par(mar=c(5,4,4,8)+0.1)
plot(x,y,type="b",pch=21,col="red",yaxt="n",lty=3,ann = FALSE)
lines(x,z,type="b",pch=22,col="blue",lty=2)
if(FALSE){自定義坐標軸}
axis(2,at=x,labels=x,col.axis="red",las=2)
axis(4,at=z,labels=round(z,digits=2),col.axis="blue",las=2,cex.axis=0.7,tck=-0.01)
if(FALSE){文本標注}
mtext("y=10/x",side=4,line=3,cex.lab=1,las=2,col="blue")
if(FALSE){標題+坐標軸標簽}
title("An Example of Creative Axes", xlab="X values",ylab="Y=X")
if(FALSE){參考線}
abline(h=seq(1,10,2), lty=2, col="blue")
par(opar)

繪制的圖形如下:

![這里寫圖片描述](http://img.blog.csdn.net/20180116213022792?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

1.7 圖例

  R語言中的圖例函數為legend(),參數如下:

  • location:指定(x,y)坐標,或使用關鍵字(如:topleft),或交互式指定位置;
  • title:圖例標題的字符串(可選);
  • legend:圖例標簽組成的字符型向量;
  • ...
其它選項還包括:指定盒子樣式的bty,背景色:bg,大小:cex,文本顏色:text.col等。
  示例代碼如下:
dose <- c(20,30,40,45,60)
drugA <- c(16,20,27,40,60)
drugB <- c(15,18,25,31,40)
opar <- par(no.readonly = TRUE)
par(lwd=2, cex=1.5, font.lab=2)
plot(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")
lines(dose,drugB,type="b",pch=17,lty=2,col="blue")
legend("topleft",inset=.05,title="Drug Type",c("A","B"),lty=c(1,2),pch=c(15,17),col=c("red","blue"))
par(opar)

繪制的圖形如下:

![這里寫圖片描述](http://img.blog.csdn.net/20180116213439137?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

1.8圖形的組合

  在R語言中,可用函數par()或layout()組合多幅圖形為一幅總括圖形。在par()函數中可用mfrow=c(nrows,ncols)來創建按行填充的、行數為nrows、列數為ncols的圖形矩陣。layout()的調用形式為layout(mat),其中mat為矩陣,制定了組合的多個圖形的所在位置,可以跨行或跨列。

  示例代碼1如下:

attach(mtcars)
opar <- par(no.readonly = TRUE)
par(mfrow=c(2,2))
plot(wt,mpg,main="scatterplot of wt vs. mpg")
plot(wt,disp,main="scatterplot of wt vs. disp")
hist(wt,main="Histogram of wt")
boxplot(wt,main="boxplot of wt")
par(opar)
detach(mtcars)

  繪制的圖形如下:

![這里寫圖片描述](http://img.blog.csdn.net/20180116212132142?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

  示例代碼2如下:

attach(mtcars)
layout(matrix(c(1,1,2,3),2,2,byrow=TRUE),widths = c(3,1),heights = c(1,2))
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)

  繪制的圖形如下:

![這里寫圖片描述](http://img.blog.csdn.net/20180116212039975?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

  以上的內容參考自《R語言實戰》。關於圖形的設置就講到這兒了,終於可以舒一口氣了~~下面我們將嘗試着自己來繪制圖形

  我們將要繪制的圖形來自於:http://www.runoob.com/try/try.php?filename=HighchartsTest ,這個圖形使用HighCharts繪制的,我們將用R語言來繪制這個圖形。代碼如下:

x <- seq(1,12)
months <- c('一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月')
Tokyo <- c(7.0,6.9,9.5,14.5,18.2,21.5,25.2,26.5,23.3,18.3,13.9,9.6)
New_York <- c(-.2,.8,5.7,11.3,17.0,22.0,24.8,24.1,20.1,14.1,8.6,2.5)
Berlin <- c(-.9,.6,3.5,8.4,13.5,17.0,18.6,17.9,14.3,9.0,3.9,1.0)
London <- c(3.9,4.2,5.7,8.5,11.9,15.2,17.0,16.6,14.2,10.3,6.6,4.8)
opar <- par(no.readonly = TRUE)
par(bty="n")
plot(Tokyo,xaxt="n",pch=19,type="b",lwd=2,
     main="月平均氣溫",sub="Plotted by R Language",
     ylim=c(-10,30),col="blue",xlab="",ylab="Temperature(℃)",axes=FALSE)
lines(New_York,type="b",pch=18,col="black",lwd=2)
lines(Berlin,type="b",pch=15,col="green",lwd=2)
lines(London,type="b",pch=17,col="orange",lwd=2)
axis(2,at=seq(-10,30,10),tick=F)
axis(1,at=x,labels=months,las=2)
abline(h=c(0,10,20,30),col="gray")
legend("topright",c("Tokyo","New York","Berlin","London"),pch=c(19,18,15,17),
       col=c("blue","black","green","orange"),bty="n")
par(opar)

繪制的圖形如下:

![模擬HighCharts的繪圖](http://img.blog.csdn.net/20180116211910179?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

  本次分享到此結束,歡迎大家交流~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM