R語言基本畫圖函數(shù)與多圖多線的用法
常用統(tǒng)計作圖函數(shù)匯總
plot()
hist() 直方圖
stem() 莖葉圖
boxplot() 箱線圖(盒形圖)
coplot() 協(xié)同圖
qqnorm() 正態(tài)qq圖
qqplot() 兩總體qq圖
1. 高級低級圖形函數(shù)的常用選項
高、低級圖形函數(shù)概述
高級圖形函數(shù)可以迅速簡便地繪制常見類型的圖形,但是,某些情況下你可能希望繪制一些有特殊要求的圖形。比如,你希望坐標軸按照自己的設(shè)計繪制,在已有的圖上增加另一組數(shù)據(jù),在圖中加入一行文本注釋,繪出多個曲線代表的數(shù)據(jù)的標簽,等等。
低級圖形函數(shù)讓你在已有的圖的基礎(chǔ)上進行添加。
低級圖形函數(shù)一般需要指定位置信息,其中的坐標指的是所謂用戶坐標,即前面的高級圖形函數(shù)所建立的坐標系中的坐標。坐標可以用兩個向量x和y給出,也可以由一個兩列的矩陣給出。如果交互作圖可以用下面介紹的locator()函數(shù)來交互地從圖形中直接輸入坐標位置。
最常用高級函數(shù)的是plot()函數(shù)。比如,
- plot(x,y)(其中x,y是向量)對兩個變量畫散點圖。
- 用plot(z) (其中z是一個定義了x變量和y變量的列表,或者一個兩列的矩陣)也可以達到同樣目的。
如果x是一個時間序列對象(時間序列對象用ts()函數(shù)生成),plot(x)繪制時間序列曲線圖。
- 如果x是一個普通向量,則繪制x的值對其下標的散點圖。
- 如果x是復數(shù)向量則繪制虛部對實部的散點圖。
- 如果f是一個因子,則plot(f)繪制f的條形圖(每個因子水平的個數(shù))。
- 如果f是因子,y是同長度的數(shù)值向量,則plot(f,y)對f的每一因子水平繪制y中相應(yīng)數(shù)值的盒形圖。
- 如果d是一個數(shù)值型數(shù)據(jù)框,則plot(d)對d的每兩個變量之間作圖(散點圖等)
load("F:/R/cl.RData") plot(cl$Sex)
高級繪圖函數(shù)常用選項
低級繪圖函數(shù)常用選項
低級圖形函數(shù)一般需要指定位置信息,其中的坐標指的是所謂用戶坐標,即前面的高級圖形函數(shù)所建立的坐標系中的坐標。坐標可以用兩個向量x和y給出,也可以由一個兩列的矩陣給出。如果交互作圖可以用下面介紹的locator()函數(shù)來交互地從圖形中直接輸入坐標位置。
圖形參數(shù)詳解
圖形元素
類型 | 解釋 |
---|---|
pch | 指定用于繪制散點的符號。繪制的點往往略高于或低于指定的坐標位置,僅pch=“.”無這個問題。![]() |
lty=2 | 指定畫線用的線型。缺省值lty=1是實線。從2開始是各種虛線。 |
lwd=2 | 指定線粗細,以標準線粗細為單位。這個參數(shù)影響數(shù)據(jù)曲線的線寬以及坐標軸的線寬。 |
col=2 | 指定顏色,可應(yīng)用于繪點、線、文本、填充區(qū)域、圖象。顏色值也可以用象”red”,”blue” 這樣的顏色名指定。 |
font=2 | 用來指定字體的整數(shù)。一般font=1是正體,2是 黑體,3是 斜體,4是 黑斜體。 |
font.axisfont.labfont.mainfont.sub | 分別用來指定坐標刻度、坐標軸標簽、標題、小標題所用的字體。 |
adj=-0.1 | 指定文本相對于給定坐標的對齊方式。取0表示左對齊,取1表示右對齊,取0.5表示居中。此參數(shù)的值實際代表的是出現(xiàn)在給定坐標左邊的文本的比例,所以adj=-0.1的效果是文本出現(xiàn)在給定坐標位置的右邊并空出相當于文本10%長度的距離。 |
cex=1.5 | 指定字符放大倍數(shù)。 |
坐標軸與坐標刻度
許多高級圖形帶有坐標軸,還可以先不畫坐標軸然后用axis()單獨加。
函數(shù)box() 用來畫坐標區(qū)域四周的框線。
坐標軸包括三個部件:軸線(用lty可以控制線型),刻度線,刻度標簽。它們可以用如下的圖形參數(shù)來控制:
參數(shù) | 解釋 |
---|---|
lab=c(5, 7, 12) | 第一個數(shù)為x軸希望畫幾個刻度線,第二個數(shù)為y軸希望畫幾個刻度線,這兩個數(shù)是建議性的;第三個數(shù)是坐標刻度標簽的寬度為多少個字符,包括小數(shù)點,這個數(shù)太小會使刻度標簽四舍五入成一樣的值。 |
las=1 | 坐標刻度標簽的方向。0表示總是平行于坐標軸,1表示總是水平,2表示總是垂直于坐標軸。 |
mgp=c(3,1,0) | 坐標軸各部件的位置。第一個元素為坐標軸位置到坐標軸標簽的距離,以文本行高為單位。第二個元素為坐標軸位置到坐標刻度標簽的距離。第三個元素為坐標軸位置到實際畫的坐標軸的距離,通常是0。 |
tck=0.01 | 坐標軸刻度線長度,單位是繪圖區(qū)域大小,值為占繪圖區(qū)域的比例。tck小于0.5時x軸和y 軸的刻度線將統(tǒng)一到相同的長度。取1時即畫格子線。取負值時刻度線畫在繪圖區(qū)域的外面。 |
xaxs=”s”yaxs=”d” | 控制x軸和y軸的畫軸方法。取值為”s”(即standard)或”e”(即extended)的時候數(shù)據(jù)范圍控制在最小刻度和最大刻度之間。取”e”時如果有數(shù)據(jù)點十分靠近邊緣軸的范圍會略微擴大。這種畫軸方式有時會在軸的一邊留下太大的空白。取值為“i”(即internal)或“r”(此為缺?。┦沟每潭染€都落在數(shù)據(jù)范圍內(nèi)部,而“r”方式所留的邊空較小。取值設(shè)為”d”時會鎖定此坐標軸,后續(xù)的圖形都使用與它完全相同的坐標軸,這在要生成一系列可比較的圖形的時候是有用的。要解除鎖定需要把這個圖形參數(shù)設(shè)為其它值。 |
一頁多圖
一頁多圖用mfrow參數(shù)或mfcol參數(shù)規(guī)定,如:
par(mfrow=c(3,2)) 表示同一頁有三行兩列共六個圖,而且次序為按行填放。
類似地,par(mfcol=c(3,2))規(guī)定相同的窗格結(jié)構(gòu),但是次序為按列填放,即先填滿第一列的三個再填第二列。
par(mfrow=c(1,1))即可。缺省時無外邊空。為了規(guī)定外邊空大小,可以用omi參數(shù)或oma參數(shù)。omi參數(shù)使用英寸為單位,oma參數(shù)以文本行高為單位,兩個參數(shù)均為四個元素的向量,分別給出下、左、上、右方的邊空大小。
如:par(oma=c(2,0,3,0))函數(shù)mtext用來在外邊空加文字標注。
其用法為mtext(text, side = 3, line = 0, outer = FALSE)
在多圖環(huán)境中還可以用mfg參數(shù)來直接跳到某一個窗格,比如par(mfg=c(2,2,3,2))表示在三行兩列的多圖環(huán)境中直接跳到第二行第二列位置。mfg參數(shù)的后兩個表示多圖環(huán)境的行、列數(shù),前兩個表示要跳到的位置。
可以不使用多圖環(huán)境而直接在頁面中的任意位置產(chǎn)生一個窗格來繪圖,參數(shù)為fig,如:par(fig=c(4,9,1,4)/10)此參數(shù)為一個向量,分別給出窗格的左、右、下、上邊緣的位置,取值為占全頁面的比例,比如上面的例子在頁面的右下方開一個窗格作圖。
圖形邊空
S中一個單獨的圖由繪圖區(qū)域(繪圖的點、線等畫在這個區(qū)域中)和包圍繪圖區(qū)域的邊空組成,邊空中可以包含坐標軸標簽、坐標軸刻度標簽、標題、小標題等,繪圖區(qū)域一般被坐標軸包圍。
邊空的大小由mai參數(shù)或mar參數(shù)控制,它們都是四個元素的向量,分別規(guī)定下方、左方、上方、右方的邊空大小,其中mai取值的單位是英寸,而mar的取值單位是文本行高度。
例如:
par(mai=c(1, 0.5, 0.5, 0)) par(mar=c(4, 2, 2, 1))
這兩個圖形參數(shù)不是獨立的,設(shè)定一個會影響另一個。S缺省的圖形邊空常常太大,以至于有時圖形窗口較小時邊空占了整個圖形的很大一部分。
通常我們可以取消右邊空,并且在不用標題時可以大大縮小上邊空。例如下例可以生成十分緊湊的圖形:
oldpar <- par(mar=c(2,2,1,0.2)) plot(x,y)
在一個頁面上畫多個圖時邊空自動減半,但我們往往還需要進一步減小邊空才能使多個圖有意義。
交互圖形函數(shù)
函數(shù)locator(n, type)運行時會停下來等待用戶在圖中點擊,然后返回圖形中鼠標點擊的位置的坐標。等待點擊時用鼠標中鍵點擊可以選擇停止等待,立即返回。參數(shù)n指定點擊多少次后自動停止,缺省為500次;參數(shù)type如果使用則可指定繪點類型,與plot()函數(shù)中的type 參數(shù)用法相同,在鼠標點擊處繪點(線、垂線,等等)。locator()的返回值是一個列表,有兩個變量(元素)x和y,分別保存點擊位置的橫坐標和縱坐標
例如,為了在已經(jīng)繪制的曲線圖中找一個空地方標上一行文本,只要使用如下程序:
text(locator(1), "Normal density", adj=0)
text()函數(shù)的adj參數(shù)用一個數(shù)字表示文本串相對于給定的坐標的畫法,adj=0表示給定坐標為文本串左側(cè)的坐標,adj=1表示給定坐標為文本串右側(cè)的坐標,adj=0.5表示給定坐標為文本串中間的坐標。
函數(shù)identify(x, y, labels)在運行時也會停下來等待用戶點擊,直到按了鼠標中鍵,任何返回用戶在圖形中用鼠標點擊的點的序號,點擊時對點擊的點加標簽。參數(shù)x和y給出要識別的各個點的坐標。labels參數(shù)指定點擊某個點時要在旁邊繪制的文本標簽,缺省時標出此點的序號,如果只需要返回值而不想畫任何標記則可以在調(diào)用此函數(shù)時加一個plot=F參數(shù)。
注意identify()與locator()不同,locator()返回圖中任意點擊位置的坐標,而identify() 只返回離點擊位置最近的點的序號。例如,我們在向量x和y中有若干個點的坐標,運行如下程序:
attach(cl) plot(Height, Weight) ; identify(Height,Weight)
這時顯示轉(zhuǎn)移到圖形窗口,進入等待狀態(tài),用戶可以點擊圖中特別的點,該點的序號就會在旁邊標出。為了結(jié)束,只要單擊鼠標中鍵或單擊右鍵并選擇停止。返回結(jié)果為你點擊的各個點的序號:
警告: 已經(jīng)找到了最近的點
警告: 沒有0.25英尺的點
[1] 1 2 10 15 16
2. hist直方圖
hist(x)作向量x的直方圖。缺省時自動確定分組,也可以用nclass=參數(shù)指定分組個數(shù),或者用breaks=參數(shù)指定一個分組點向量。如果指定了prob=T則縱軸顯示密度估計。
3. stem莖葉圖
Usage:
stem(x, scale = 1, width = 80, atom = 1e-08)
Arguments:
x: a numeric vector.
scale: This controls the plot length.
width: The desired width of plot.
atom: a tolerance.
References:
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) _The New S
Language_. Wadsworth & Brooks/Cole.
Examples:
stem(islands)
stem(log10(islands))
stem(cl$Weight, scale = 1, width = 80, atom = 1e-08) The decimal point is 1 digit(s) to the right of the | 4 | 1 6 | 7 8 | 3445508 10 | 0332233 12 | 83 14 | 0
4. boxplot箱線圖
箱線圖的圖形中的參數(shù)意義如下:
例子: 作了兩個圖疊加,一個為subset= supp == “VC“,另一個為subset= supp == ”O(jiān)J“.數(shù)據(jù)ToothGrowth有兩個數(shù)量變量(len,dose)和一個屬性變量(supp); 對每個supp,dose各有三個值(各形成三個盒形圖). len ~ dose意味著box為len所做.
data(ToothGrowth) boxplot(len ~ dose, data = ToothGrowth, boxwex = 0.25, at = 1:3 - 0.2, subset= supp == "VC", col="yellow", main="Guinea Pigs' Tooth Growth", xlab="Vitamin C dose mg", ylab="tooth length", ylim=c(0,35)) boxplot(len ~ dose, data = ToothGrowth, add = TRUE, boxwex = 0.25, at = 1:3 + 0.2, subset= supp == "OJ", col="orange") legend(2, 9, c("Ascorbic acid", "Orange juice"), fill = c("yellow", "orange"))
boxplot(cl$Height~cl$Sex,data=cl,col = "lightgray");
5. coplot() 協(xié)同圖
attach(cl) coplot(Weight ~ Height | Sex)
如果z是一個數(shù)值型變量,則coplot() 先對z的取值分組,然后對z的每一組取值分別繪圖。
甚至可以用如coplot(y~x | x1+x2)表示對x1和x2的每一水平組合繪圖。
coplot()和pairs()函數(shù)缺省繪制散點圖,但可以用一個panel= 參數(shù)指定其它的低級繪圖函數(shù),如lines,panel.smooth等。
tsplot(x)繪制時間序列曲線圖。多個參數(shù)時tsplot(x1, x2, ...)表示繪制多條曲線,自動統(tǒng)一曲線取值范圍。如果參數(shù)非時間序列對象則以下標1,2,3等為橫坐標繪圖。
6. qqnorm() 正態(tài)qq圖與qqplot() 兩總體qq圖
- qqnorm(x), qqline(x), qqplot(x,y)作分位數(shù)-分位數(shù)圖。
- qqnorm(x)對向量x作正態(tài)概率(縱軸為次序統(tǒng)計量值,橫軸為對應(yīng)該次序統(tǒng)計量的標準正態(tài)分布分位數(shù)值)。
- qqline(x) 除作qqnorm(x)圖之外還畫一條擬合曲線。
qqplot(x,y)把x和y的次序統(tǒng)計量分別畫在x軸和y 軸以比較兩個變量的分布。
x <- rnorm(50) y <- rexp(60) qqplot(x,y)#可以判斷是不是同一個類型的分布
多圖多線
1 多圖
par(mfrow=c(2,2))#準備畫22的4個圖 plot(compression, distance,main= "Hooke's Law") #只有標題的圖 plot(compression, distance,main= "Hooke's Law", xlab= "x",ylab= "y") #標題+x,y標記 identify(compression,distance) #標出點號碼 plot(compression, distance,main="Hooke's Law") #只有標題的圖 text(46,120, "f=1/2*k*s")#在指定位寫入文字 plot(compression, distance,main="Hooke's Law") #只有標題的圖 text(locator(2), "I am here!") #在點擊的兩個位置寫入文字
2 標簽
#畫圖 (對數(shù)變換后) Par(cex=0.7,mex=0.7) #character (cex) & margin (mex) expansion plot(log(body),log(brain)) text(x=log(body), y=log(brain),labels=row.names(Animals), adj=1.5)# adj=0 implies left adjusted text #畫圖 (對數(shù)變換后) plot(log(body),log(brain)) identify(log(body),log(brain),row.names(Animals))
3 顏色畫圖函數(shù)
view.colours = function(){ plot(1, 1, xlim=c(0,14), ylim=c(0,3), type="n", axes=F, xlab="",ylab="") text(1:6, rep(2.5,6), paste(1:6), col=palette()[1:6], cex=2.5) text(10, 2.5, "Default palette", adj=0) rainchars = c("R","O","Y","G","B","I","V") text(1:7, rep(1.5,7), rainchars, col=rainbow(7), cex=2.5) text(10, 1.5, "rainbow(7)", adj=0) cmtxt = substring("cm.colors", 1:9,1:9) # Split "cm.colors" into its 9 characters text(1:9, rep(0.5,9), cmtxt, col=cm.colors(9), cex=3) text(10, 0.5, "cm.colors(9)", adj=0) } view.colours()
4 多線
高級低級函數(shù)畫圖
x <- seq(-pi, pi, len = 65) plot(x, sin(x), type = "l", ylim = c(-1.2, 1.8), col = 3, lty = 2) points(x, cos(x), pch = 3, col = 4) lines(x, tan(x), type = "b", lty = 1, pch = 4, col = 6) title("legend(..., lty = c(2, -1, 1), pch = c(-1,3,4), merge = TRUE)", cex.main = 1.1) # 注意圖例書寫方式 legend(-1, 1.9, c("sin", "cos", "tan"), col = c(3,4,6), lty = c(2, -1, 1), pch = c(-1, 3, 4), merge = TRUE, bg='gray90')
matplot畫圖
matplot :用矩陣的列畫多線圖
Usage:
matplot(x, y, type = "p", lty = 1:5, lwd = 1, lend = par("lend"), pch = NULL, col = 1:6, cex = NULL, bg = NA, xlab = NULL, ylab = NULL, xlim = NULL, ylim = NULL, ..., add = FALSE, verbose = getOption("verbose"))
require(grDevices) matplot((-4:5)^2, main = "Quadratic") # almost identical to plot(*) sines <- outer(1:20, 1:4, function(x, y) sin(x / 20 * pi * y)) matplot(sines, pch = 1:4, type = "o", col = rainbow(ncol(sines))) matplot(sines, type = "b", pch = 21:23, col = 2:5, bg = 2:5, main = "matplot(...., pch = 21:23, bg = 2:5)")
5 時間序列圖
x=runif(100) x=ts(x,start=1960+(3/12),frequency=12)#構(gòu)造時間序列frequency=12即按個月份構(gòu)造 options(digits=2) x
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 1960 0.444 0.849 0.459 0.659 0.277 0.268 0.958 0.926 0.595 1961 0.250 0.769 0.111 0.944 0.593 0.459 0.670 0.331 0.045 0.694 0.473 0.227 1962 0.037 0.181 0.562 0.455 0.419 0.968 0.288 0.187 0.143 0.548 0.437 0.280 1963 0.149 0.623 0.937 0.108 0.755 0.077 0.963 0.781 0.660 0.458 0.787 0.176 1964 0.997 0.650 0.045 0.849 0.018 0.744 0.148 0.964 0.844 0.660 0.080 0.303 1965 0.954 0.217 0.909 0.658 0.991 0.797 0.020 0.363 0.183 0.332 0.793 0.676 1966 0.459 0.270 0.813 0.818 0.138 0.780 0.679 0.029 0.553 0.895 0.548 0.480 1967 0.898 0.212 0.299 0.223 0.637 0.167 0.102 0.424 0.438 0.058 0.048 0.474 1968 0.254 0.381 0.532 0.089 0.825 0.337 0.382
plot(x,main="Time series")
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
R語言數(shù)據(jù)可視化繪制Circular?bar?plot實現(xiàn)環(huán)形柱狀圖
這篇文章主要為大家介紹了R語言繪制Circular?bar?plot實現(xiàn)環(huán)形柱狀圖的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-02-02R語言繪制數(shù)據(jù)可視化小提琴圖Violin plot with dot畫法
這篇文章主要為大家介紹了R語言繪制數(shù)據(jù)可視化小提琴圖Violin plot with dot畫法的示例詳解有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-02-02R語言兩組變量特征相關(guān)關(guān)系熱圖繪制畫法
本文為大家介紹了如何畫兩組變量(特征)的相關(guān)關(guān)系熱圖的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-02-02R語言中if(){}else{}語句和ifelse()函數(shù)的區(qū)別詳解
這篇文章主要介紹了R語言中if(){}else{}語句和ifelse()函數(shù)的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04