R绘图基础
?效果Figure 1.所示,type = 'b' 指同時繪制線和點。
?
?
Figure 1.
修改圖形的參數
有兩種方式可以修改圖形的參數:
1. 通過par()函數進行修改,一旦修改之后,直到下次修改參數之前所繪制的圖都有效。par()是會生成一個含有當前圖形設置的參數列表,par(no.readonly=TRUE)是生成可以修改的當前圖形參數列表。
2. 通過鍵值對直接在繪圖函數上修改,這樣只會對只會對當前的圖有效。
用鍵值對的方式實現同樣的功能(Figure 2.):
plot(dose,drugA,type='b',lty=2,pch=17)Figure 2.
點的符號和線條的修改
?
| ? | 調控形狀 | 調控大小(粗細) |
| 點 | pch | cex |
| 線條 | lty | lwd |
?pch、lty繪制點、線時使用的可能的參數:
?符號21~25,還可以指定邊界顏色( col= )和填充色( bg= )
顏色
?有許多函數可以創建連續性顏色向量的函數:rainbow()、heat.colors()、terrain.colors()、topo.colors()、cm.colors()
> n <- 10 > mycolors <- rainbow(n) > pie(rep(1,n), labels= mycolors, col= mycolors)?Figure 3.
?
?gray()是生成多階灰度的顏色,顏色值在0-1之間。
Figure 4.
還有的其他顏色函數:
col.axis 坐標軸刻度文字的顏色
col.lab 坐標軸標簽(名稱)的顏色
col.main 標題顏色
col.sub 副標題顏色
fg 圖形的前景色
bg 圖形的背景色。。。。。代碼應用
字號、字體、字樣
?
圖形尺寸 & 圖形邊界
pin()控制圖形尺寸(寬高),單位是英寸
mai 用數值向量表示邊界的大小,順序初始位下,逆時針旋轉。單位是英寸。
mar 和mai不同的是單位是英分。默認值為c(5, 4, 4, 2) + 0.1。一英分等于十二分之一英寸。
設置圖形的寬x高=2x3英寸
> 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(pin=c(2,3)) > par (lwd=2,cex=1.5) > par(cex.axis=.75,font.axis=3) > plot(dose,drugB,type='b',pch=23,lty=6,col='blue',bg='green')?
> 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(pin=c(2,3)) > par (lwd=2,cex=1.5) > par(cex.axis=.75,font.axis=3) > mycolors <- rainbow(5) > plot(dose,drugB,type='b',pch=23,lty=6,col='blue',bg=mycolors)?練習一下bg顏色特效,col用在多條線時的顏色控制。
添加文本、自定坐標軸、圖例
高級繪圖函數(例如 plot 、 hist 、 boxplot )也允許自行設定坐標軸和文本標注選項??梢蕴砑訕祟}( main )、副標題( sub )、坐標軸標簽( xlab 、 ylab ),指定了坐標軸范圍( xlim 、 ylim )。
但并不是所有繪圖函數都支持這樣的自定義選項。還有些繪圖函數有默認的標簽和標題,可以在plot或者par函數中利用ann=FALSE來移除默認的。
標題
title()函數
> plot(dose,drugB,type='b',pch=23,lty=6,col='blue',bg=mycolors,ann=FALSE) > title(main="My Title",col.main="red",sub="MY Sub-title",col.sub="blue", + xlab = "My X label",ylab="My y label", + col.lab="green",cex.lab=.75)?
?坐標軸
?axis()來自定義坐標軸,其中:axis(side, at=,labels=,pos=,lty=,col=,las=,tck=, ...)
?
| side | 一個整數,代表axis將要繪制的一維的坐標軸在那個位置(1=下,2=左,3=上,4=右) |
| at | 數值型向量,表示在對應位置上所繪制的數據 |
| labels | 字符型向量,表示置于刻度線旁邊的文字標簽,如果位NULL,直接使用at中的值 |
| pos | 設定兩條軸線相交位置的值。 |
| lty | 線條類型 |
| col | 線條(col)和刻度線(col.axis)顏色 |
| las | 軸標簽平行(=0)還是垂直(=2)于坐標軸 |
| tck | 刻度線的長度,相對于繪圖區域的大小而言,負值表示在圖行外側,正直表示在圖形內側,默認值是 -.01,0表示禁用刻度線,1表示繪制網格線 |
其中的ann=FALSE是為了消除plot函數中自帶的標簽和標題,目的是為了和下面的axis配合使用。
yaxt="n"是為了消除y軸的刻度和標簽,也可以使用xaxt="n"來消除x軸刻度和標簽,也是為了配合axis的使用
?
次要刻度線
?需要使用 Hmisc 包中的 minor.tick() 函數
> library(Hmisc) 載入需要的程輯包:lattice 載入需要的程輯包:survival 載入需要的程輯包:Formula 載入需要的程輯包:ggplot2載入程輯包:‘Hmisc’The following objects are masked from ‘package:base’:format.pval, units> minor.tick(nx=2,ny=3,tick.ratio=0.5)nx、ny指在X軸和Y軸每兩條刻度線之間用次要刻度線劃分成的區間個數,tick.ratio 表示次要刻度線相對于主刻度線的大小比例,當前主刻度線的大小可以用par("tck")獲取。
參考線
abline(h = yvalues, v = xvalues), h是在添加水平線,v是添加垂直線。函數中還可以制定圖形的其他參數。
abline(v=seq(1,10,2),lty=2,col="blue")在x為1,3,5,7,9位置上添加了4條垂直方向的藍色虛線
對圖形的注釋(圖例)
legend(location, title, legend, ...)
location:可以有多種形式進行表示,直接給定左上角的x,y的坐標;也可以執行locator(1),然后通過鼠標點擊確定其位置;還可以使用關鍵字bottom、bottomleft、left、topleft、top、topright、right、bottomright、center來放置位置,在使用關鍵之后還可以同時使用inset=向圖形內側移動的大小(單位是相對的百分數表示)。title 圖例標題的字符串(可選)。legend 圖例標簽組成的字符型向量。
help(legend)可以得到一些提示。
將文本添加到圖形上(文本標注)
分為向繪圖內部(text)和繪圖的外部四個邊界上(mtext)添加文本。
text(location,"text to place",pos, ...)
mtext("text to place",side,line=n, ...)
其他常用的選項有cex、col、font來調整字體大小、顏色、字體樣式。
cex是指添加的文字相對于原先的縮放比例,cex=.6標簽大小被縮小了40%
對不同字體族的示例:
> opar <- par(no.readonly=TRUE) > par(cex=1.5) > plot(1:7,1:7,type="n") > text(3,3,"Example of default text") > text(4,4,family="mono","Example of mono-spaced text") > text(5,5,"Example of serif text",family="serif") > par(opar)?數學標注
?
一個面板中分區域畫多幅圖
有兩種方式可以實現:
par( mfrow = c(nrows,ncols) )? 按行進行填充;mfcol = c( nrows, ncols)是按照列進行填充的方式。
layout(matrix=, nrows, ncols, byrow=,)? matrix是一個矩陣表示著將要放置的位置,byrow說明了是否要按照行排還是列排,省略默認的是按照列排。對于更高精度的設置:widths=各列寬度指組成的一個向量,heights=隔行高度組成的一個向量值。相對寬度可以直接通過數值指定,絕對寬度(以厘米為單位)可以通過函數 lcm() 來指定。
matrix(c(1,1,2,3),byrow=TRUE;是指第一個圖按在矩陣的第一行 一二兩列,第二張圖在第二行第一列,第三張圖在第二行第三列。
martix(c(1,0,2,3), byrow=TRUE; 是指第一張圖在第一行第一列,第二張圖在第二行第一列,第三張圖在第二章第二列。0表示對應的位置沒有圖。
?
?widths和heights的控制:
第1行中圖形的高度是第2行中圖形高度的三分之一。除此之外,右下角圖形的寬度是左下角圖形寬度的四分之一????
?
?圖形布局或者疊加進行畫圖
通過fig()函數來實現。
> par(opar) > opar <- par(no.readonly=TRUE) > par(mar=c(5,4,4,2)+0.1) > par(fig=c(0,0.8,0,0.8)) > plot(mtcars$wt,mtcars$mpg,xlab="Miles Per Gallon",ylab="Car Weight") > par(fig=c(0,0.8,0.55,1),new = TRUE) > boxplot(mtcars$mpg,axes=FALSE) > par(fig=c(0.65,1,0,0.8),new=TRUE) > boxplot(mtcars$wt,axes=FALSE,horizontal=TRUE) > mtext("Enhanced Scatterplot",side=3,outer=TRUE,line=-3) > par(opar)這幅圖的繪制原理,請試想完整的繪圖區域:左下角坐標為(0,0),而右上角坐標為(1,1)。參數 fig= 的取值是一個形如 c(x1, x2, y1, y2) 的數值向量。?
第一個 fig= 將散點圖設定為占據橫向范圍0~0.8,縱向范圍0~0.8。上方的箱線圖橫向占據?0~0.8,縱向0.55~1。右側的箱線圖橫向占據0.65~1,縱向0~0.8。 fig= 默認會新建一幅圖形,所
以在添加一幅圖到一幅現有圖形上時,設定參數 new=TRUE 。最優的位置需要不斷嘗試找到合適的位置參數。
?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?
?
?
餅圖
> par(mfrow=c(2,2)) > slices <-c(10,12,4,16,8) > lbls <- c("US","UK","Australia","Germany","France") > pie(slices,labels=lbls,main="Simple Pie Chart") > n <- sum(slices) > pct <- round(slices/n*100) > labls2 <- paste(lbls," ",pct,"%",sept="") > pie(slices,labels=labls2,col=rainbow(length(labls2)),main="Pie Chart with Percentages") > library(plotrix) > pie3D(slices,labels=lbls,explode=0.1,main="3D Pie Chart") > mytable <- table(state.region) > lbls3 <- paste(names(mytable),"\n",mytable,sep="") > pie(mytable,labels = lbls3,main="Pie Chart from a Table\n (with sample sizes)")paste()函數
扇形圖
> library(plotrix) > slices <- c(10,12,4,16,8) > lbls <- c("US","UK","Australia","Germany","France")扇形圖有不同的半徑,使得每個區域都可以明顯的比較出大小,但是真正區分大小的是其寬度。
直方圖
?hist()函數、其中參數freq=FLASE可以設定位畫出的直方圖是按照密度畫的,而不是按照頻數來畫的。
breaks=, 可以指定要分組的數量。
rug( jitter( ) ) 是添加虛軸圖(rug plot),實際數據值的一種呈現方式,若數據中有很多相同的值(被稱為結),可以使用rug(jitter(mtcars$mpg,amount=.01 ) )將虛軸圖的數據打散(每個點添加了一個小的隨機值在amount區間內上下均勻分布的進行取數,來避免重疊數據產生影響)。
可以使用lines( density() )來添加密度曲線。
box()可以為圖形田家園一個框。
lines()向已經存在的圖上添加密度曲線
?
> mtcars$mpg[1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 [16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 [31] 15.0 21.4上面先看一下數據組成
?
最有困惑性的應該是yfit <- yfit*diff(h$mids[1:2]) * length(x) ,先看一下h的數據成分:
> h $breaks[1] 10 12 14 16 18 20 22 24 26 28 30 32 34$counts[1] 2 1 7 3 5 5 2 2 1 0 2 2$density[1] 0.031250 0.015625 0.109375 0.046875 0.078125 0.078125 0.031250 0.031250[9] 0.015625 0.000000 0.031250 0.031250$mids[1] 11 13 15 17 19 21 23 25 27 29 31 33$xname [1] "x"$equidist [1] TRUEattr(,"class") [1] "histogram"diff基本功能可以用來計算序列數值之間的差值(還有在時間序列分析中的應用?數學菜雞......逃。。。。)
diff:
?第二個參數lag指明了要計算的間隔,differences是指要計算的次數,比如在第一次沒有指明次數時得到的差值9,16.....,當differences=2時又對上次得到的差值再一次計算,這樣就是計算出兩次。
?
?核密度圖
核密度函數是由數據統計出來的和真實密度函數只相差一些無關項得到的。
> par(mfrow=c(2,1)) > d <- density(mtcars$mpg) > plot(d) > plot(d,main="Kernel Density of Miles Per Gallon") > polygon(d,col="red",border="blue") > rug(mtcars$mpg,col="brown")?polgon()是根據x,y坐標值繪制多邊形,這兒的坐標值是由density函數提供的。
rug添加了虛軸。
?核密度圖可用于比較組間差異。普遍缺乏方便好用的軟件,這種方法其實完全沒有被充分利用。sm 包填補了這一缺口。
??sm.density.compare(x, factor)。x 是一個數值型向量, factor 是一個分組變量。允許多個組繪出他們的核密度函數。
?
fill來填充顏色
我的疑問點在compare中mpg和cyl是怎么聯系起來的。
箱圖
繪制連續型變量的五個數: 最小值、下四分位數(25%)、中位數、上四分位數。還能夠顯示出可能為離群點的觀測(限制的范圍在±1.5*IQR以外的值,IQR表示四分位距,即上四分位數與下四分位數的差值)
> boxplot(mtcars$mpg,main="Box plot",ylab="Miles per Gallon")使用 boxplot可以查看具體的統計量
> boxplot.stats(mtcars$mpg) $stats [1] 10.40 15.35 19.20 22.80 33.90$n [1] 32$conf [1] 17.11916 21.28084$out numeric(0)中位數是19.2,50%的值都落在了15.3和22.8之間,最小值為10.4,最大值為33.9,下面的圖還沒有離群點。且略微偏正(上側的比下冊的更長)
使用并列箱線圖進行夸組比較
boxplot(formula, data=dataframe)???? formula指一個公式,dataframe代表提供數據的數據框或者列表。formula: y~A, 把A的每個值并列的生成變量y的箱線圖。y~A*B 則將A和B的所有水平的兩兩組合生成數值型變量y的箱線圖。???啊?怎么生成且比較
varwidth=TRUE 將 使 箱 線 圖 的 寬 度 與 其 樣 本 大 小 的 平 方 根 成 正 比 。 參 數horizontal=TRUE 可以反轉坐標軸的方向。
?小提琴圖
?
點圖
dotchart(x,labels=)? x是數值型向量,labels是每個點的標簽組成的向量,可以通過添加參數groups 來選定一個因子,用以指定 x 中元素的分組方式。
則參數 gcolor 可以控制不同組標簽的顏色, cex 可控制標簽的大小。
?
?
?
> x <- mtcars[order(mtcars$mpg),] > xmpg cyl disp hp drat wt qsec vs am gear carb Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 ... > x$cyl <- factor(x$cyl) > x$cyl[1] 8 8 8 8 8 8 8 8 8 8 8 8 6 6 8 6 8 6 6 6 6 4 4 4 4 4 4 4 4 4 4 4 Levels: 4 6 8 > x$color[x$cyl==4] <- "red" > x$color[x$cyl==6] <- "blue" > x$color[x$cyl==8] <- "darkgreen" >dotchart(x$mpg,labels=row.names(x),cex=.7,groups=x$cyl,gcolor="black",color=x$color,pch=19,main="Gas Mileage for Car Model\ngrouped by cylinder",xlab="miles Per Gallon")對數據框 mtcars 進行排序,結果保存為數據框 x 。x的數值向量 cyl 被轉換為一個因子 ;字符型向量( color )被添加到了數據框x 中;根據 cyl 的值,它所含的值為 "red" 、 "blue" 或 "darkgreen";數據點的標簽來自數據框的行名;點和標簽的顏色來自向量 color;
?
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
散點圖
> attach(mtcars) > plot(wt,mpg,main="Basic Scatter plot of MPG vs. Weight",xlab="Car Weight(lbs/1000)",ylab="Miles Per Gallon ",pch=19) > abline(lm(mpg~wt),col="red",lwd=2,lty=1) > lines(lowess(wt,mpg),col="blue", lwd=2,lty=2)abline()是得到一條最優擬合的線性直線;
R兩個平滑曲線擬合函數:
lowess()函數是用來添加一條平滑的曲線,基于局部加權多項式回歸的非參數方法;
loess() 是基于lowess()表達式版本的進一步更新或者說更強大的擬合函數;
?
。。。。一大波內容被誤刪了
高密度散點圖
?
> n <- 1000 > c1 <- matrix(rnorm(n,mean=0,sd=.),ncol=2) Error in rnorm(n, mean = 0, sd = .) : 找不到對象'.' > c1 <- matrix(rnorm(n,mean=0,sd=.5),ncol=2) > c2 <- matrix(rnorm(n,3,2),ncol=2) > mydata <- rbind(c1,c2) > mydata <- as.data.frame(mydata) > names(mydata) <-c("x","y") > with(mydata,plot(x,y,pch=19,main="Scatter Plot with 10000 Obersvations"))上面的散點圖因為有很多數據點的重疊影響了x 和y之間的關系,解決辦法之一是用smoothScatter()函數可以利用核密度估計生成用顏色密度來表示點分布的散點圖。圖中的小黑點就是表示的具體的值,高度陰影區域也有點。
> with(mydata,smoothScatter(x,y,main="Scatterplot Colored by Smoothed Densities"))?
?
?
> with(mydata,{ + bin <- hexbin(x,y,xbin=50) + plot(bin,main="Hexagonal Binning with 10000 Obervations") + })?hexbin包中的hexbin()函數把二元變量的封箱放在六邊形單元格中。
iplot()函數可以通過顏色來展示點的密度(在某特定點上的數據點的數目)
> with(mydata,iplot(x,y,main="Image Scatter Plot with Color Indicating Density"))三維散點圖
> library(scatterplot3d) > attach(mtcars) > scatterplot3d(wt,disp,mpg,main="Basic 3D Scatter Plot")?
> attach(mtcars) The following objects are masked from mtcars (pos = 3):am, carb, cyl, disp, drat, gear, hp, mpg, qsec, vs, wt> scatterplot3d(wt,disp,mpg,pch=16,highlight.3d=TRUE,type="h",main="3D Scatter Plot eith Vertical Lines")?在上面的圖中添加一個回歸面:
s3d
圖形利用多元回歸方程,對通過車重和排量預測每加侖英里數進行了可視化處理。平面代表預測值,圖中的點是實際值。平面到點的垂直距離表示殘差值。若點在平面之上則表明它的預測值被低估了,而點在平面之下則表明它的預測值被高估了。?
交互的三維散點圖
函數:plot3d( x, y, z),還可以控制col,size....屬性
?
圖
還可以用Rcmde中的函數scatter3d(),還可以包含各種回歸曲面,比如線性、二次、平滑以及附加的類型。
> library(Rcmdr) >attach(mtcars) > scatter3d(wt,disp,mpg)圖
氣泡圖
通過三維散點圖來展示三個定量變量間的關系?,F在介紹另外一種思路:先創建一個二維散點圖,然后用點的大小來代表第三個變量的值。這便是氣泡圖 (bubble plot);可以在指定的(x, y)坐標上繪制圓圈圖、方形圖、星形圖、溫度計圖和箱線圖。以繪制圓圈圖為例:
symbols(x,y,circle = radius) 分別表示x、y坐標和圓圈半徑。
折線圖
將散點圖上的點從左往右連接起來, 那么就會得到一個折線圖
> opar <- par(no.readonly=TRUE) > par(mfrow=c(1,2)) > t1 <- subset(Orange,Tree==1) > plot(t1$age,t1$cirumference,xlab="Age (days)",ylab="Circumference(mm)",main="Orange Tree 1 Growth") > plot(t1$age,t1$circumference,xlab="Age (days)",ylab="Circumference(mm)",main="Orange Tree 1 Growth",type="b")subset()是從數據中選取一定的符合條件的數據,用邏輯運算符進行操作。subset(x, subset, select, drop = FALSE, ...)相當于數據庫的查詢語句。?
?其中的參數type=,主要的賦值有一下幾種:
?
> Orange$Tree <- as.numeric(Orange$Tree) > ntrees <- max(Orange$Tree) > xrange <- range(Orange$age) > yrange <- range(Orange$circumference) > plot(xrange,yrange,type="n",xlab="Age(days)",ylab="Circumference(mm)") > colors <- rainbow(ntrees) > linetye <-c(1:ntrees) > plotchar <- seq(18,18+ntrees,1) > for(i in 1:ntrees){ + tree <- subset(Orange,Tree==i) + lines(tree$age,tree$circumference,type="b",lwd=2,lty=linetye[i],col=colors[i],pch=plotchar[i]) + } > title("Tree Growth","example of line polt") > legend(xrange[1],yrange[2],1:ntrees,cex=.8,pch=plotchar,lty=linetye,title="Tree")相關圖
馬賽克圖?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: Ubuntu18.04下安装RRStud
- 下一篇: 数论定理总结