您好,登錄后才能下訂單哦!
本篇內容主要講解“R語言怎么使用畫圖函數與多圖多線”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“R語言怎么使用畫圖函數與多圖多線”吧!
plot()
hist() 直方圖
stem() 莖葉圖
boxplot() 箱線圖(盒形圖)
coplot() 協同圖
qqnorm() 正態qq圖
qqplot() 兩總體qq圖
高、低級圖形函數概述
高級圖形函數可以迅速簡便地繪制常見類型的圖形,但是,某些情況下你可能希望繪制一些有特殊要求的圖形。比如,你希望坐標軸按照自己的設計繪制,在已有的圖上增加另一組數據,在圖中加入一行文本注釋,繪出多個曲線代表的數據的標簽,等等。
低級圖形函數讓你在已有的圖的基礎上進行添加。
低級圖形函數一般需要指定位置信息,其中的坐標指的是所謂用戶坐標,即前面的高級圖形函數所建立的坐標系中的坐標。坐標可以用兩個向量x和y給出,也可以由一個兩列的矩陣給出。如果交互作圖可以用下面介紹的locator()函數來交互地從圖形中直接輸入坐標位置。
最常用高級函數的是plot()函數。比如,
- plot(x,y)(其中x,y是向量)對兩個變量畫散點圖。
- 用plot(z) (其中z是一個定義了x變量和y變量的列表,或者一個兩列的矩陣)也可以達到同樣目的。
如果x是一個時間序列對象(時間序列對象用ts()函數生成),plot(x)繪制時間序列曲線圖。
- 如果x是一個普通向量,則繪制x的值對其下標的散點圖。
- 如果x是復數向量則繪制虛部對實部的散點圖。
- 如果f是一個因子,則plot(f)繪制f的條形圖(每個因子水平的個數)。
- 如果f是因子,y是同長度的數值向量,則plot(f,y)對f的每一因子水平繪制y中相應數值的盒形圖。
- 如果d是一個數值型數據框,則plot(d)對d的每兩個變量之間作圖(散點圖等)
load("F:/R/cl.RData") plot(cl$Sex)
低級圖形函數一般需要指定位置信息,其中的坐標指的是所謂用戶坐標,即前面的高級圖形函數所建立的坐標系中的坐標。坐標可以用兩個向量x和y給出,也可以由一個兩列的矩陣給出。如果交互作圖可以用下面介紹的locator()函數來交互地從圖形中直接輸入坐標位置。
圖形元素
類型 | 解釋 |
---|---|
pch | 指定用于繪制散點的符號。繪制的點往往略高于或低于指定的坐標位置,僅pch=“.”無這個問題。 |
lty=2 | 指定畫線用的線型。缺省值lty=1是實線。從2開始是各種虛線。 |
lwd=2 | 指定線粗細,以標準線粗細為單位。這個參數影響數據曲線的線寬以及坐標軸的線寬。 |
col=2 | 指定顏色,可應用于繪點、線、文本、填充區域、圖象。顏色值也可以用象”red”,”blue” 這樣的顏色名指定。 |
font=2 | 用來指定字體的整數。一般font=1是正體,2是 黑體,3是 斜體,4是 黑斜體。 |
font.axisfont.labfont.mainfont.sub | 分別用來指定坐標刻度、坐標軸標簽、標題、小標題所用的字體。 |
adj=-0.1 | 指定文本相對于給定坐標的對齊方式。取0表示左對齊,取1表示右對齊,取0.5表示居中。此參數的值實際代表的是出現在給定坐標左邊的文本的比例,所以adj=-0.1的效果是文本出現在給定坐標位置的右邊并空出相當于文本10%長度的距離。 |
cex=1.5 | 指定字符放大倍數。 |
許多高級圖形帶有坐標軸,還可以先不畫坐標軸然后用axis()單獨加。
函數box() 用來畫坐標區域四周的框線。
坐標軸包括三個部件:軸線(用lty可以控制線型),刻度線,刻度標簽。它們可以用如下的圖形參數來控制:
參數 | 解釋 |
---|---|
lab=c(5, 7, 12) | 第一個數為x軸希望畫幾個刻度線,第二個數為y軸希望畫幾個刻度線,這兩個數是建議性的;第三個數是坐標刻度標簽的寬度為多少個字符,包括小數點,這個數太小會使刻度標簽四舍五入成一樣的值。 |
las=1 | 坐標刻度標簽的方向。0表示總是平行于坐標軸,1表示總是水平,2表示總是垂直于坐標軸。 |
mgp=c(3,1,0) | 坐標軸各部件的位置。第一個元素為坐標軸位置到坐標軸標簽的距離,以文本行高為單位。第二個元素為坐標軸位置到坐標刻度標簽的距離。第三個元素為坐標軸位置到實際畫的坐標軸的距離,通常是0。 |
tck=0.01 | 坐標軸刻度線長度,單位是繪圖區域大小,值為占繪圖區域的比例。tck小于0.5時x軸和y 軸的刻度線將統一到相同的長度。取1時即畫格子線。取負值時刻度線畫在繪圖區域的外面。 |
xaxs=”s”yaxs=”d” | 控制x軸和y軸的畫軸方法。取值為”s”(即standard)或”e”(即extended)的時候數據范圍控制在最小刻度和最大刻度之間。取”e”時如果有數據點十分靠近邊緣軸的范圍會略微擴大。這種畫軸方式有時會在軸的一邊留下太大的空白。取值為“i”(即internal)或“r”(此為缺省)使得刻度線都落在數據范圍內部,而“r”方式所留的邊空較小。取值設為”d”時會鎖定此坐標軸,后續的圖形都使用與它完全相同的坐標軸,這在要生成一系列可比較的圖形的時候是有用的。要解除鎖定需要把這個圖形參數設為其它值。 |
一頁多圖用mfrow參數或mfcol參數規定,如:
par(mfrow=c(3,2)) 表示同一頁有三行兩列共六個圖,而且次序為按行填放。
類似地,par(mfcol=c(3,2))規定相同的窗格結構,但是次序為按列填放,即先填滿第一列的三個再填第二列。
par(mfrow=c(1,1))即可。缺省時無外邊空。為了規定外邊空大小,可以用omi參數或oma參數。omi參數使用英寸為單位,oma參數以文本行高為單位,兩個參數均為四個元素的向量,分別給出下、左、上、右方的邊空大小。
如:par(oma=c(2,0,3,0))函數mtext用來在外邊空加文字標注。
其用法為mtext(text, side = 3, line = 0, outer = FALSE)
在多圖環境中還可以用mfg參數來直接跳到某一個窗格,比如par(mfg=c(2,2,3,2))表示在三行兩列的多圖環境中直接跳到第二行第二列位置。mfg參數的后兩個表示多圖環境的行、列數,前兩個表示要跳到的位置。
可以不使用多圖環境而直接在頁面中的任意位置產生一個窗格來繪圖,參數為fig,如:par(fig=c(4,9,1,4)/10)此參數為一個向量,分別給出窗格的左、右、下、上邊緣的位置,取值為占全頁面的比例,比如上面的例子在頁面的右下方開一個窗格作圖。
S中一個單獨的圖由繪圖區域(繪圖的點、線等畫在這個區域中)和包圍繪圖區域的邊空組成,邊空中可以包含坐標軸標簽、坐標軸刻度標簽、標題、小標題等,繪圖區域一般被坐標軸包圍。
邊空的大小由mai參數或mar參數控制,它們都是四個元素的向量,分別規定下方、左方、上方、右方的邊空大小,其中mai取值的單位是英寸,而mar的取值單位是文本行高度。
例如:
par(mai=c(1, 0.5, 0.5, 0)) par(mar=c(4, 2, 2, 1))
這兩個圖形參數不是獨立的,設定一個會影響另一個。S缺省的圖形邊空常常太大,以至于有時圖形窗口較小時邊空占了整個圖形的很大一部分。
通常我們可以取消右邊空,并且在不用標題時可以大大縮小上邊空。例如下例可以生成十分緊湊的圖形:
oldpar <- par(mar=c(2,2,1,0.2)) plot(x,y)
在一個頁面上畫多個圖時邊空自動減半,但我們往往還需要進一步減小邊空才能使多個圖有意義。
函數locator(n, type)運行時會停下來等待用戶在圖中點擊,然后返回圖形中鼠標點擊的位置的坐標。等待點擊時用鼠標中鍵點擊可以選擇停止等待,立即返回。參數n指定點擊多少次后自動停止,缺省為500次;參數type如果使用則可指定繪點類型,與plot()函數中的type 參數用法相同,在鼠標點擊處繪點(線、垂線,等等)。locator()的返回值是一個列表,有兩個變量(元素)x和y,分別保存點擊位置的橫坐標和縱坐標
例如,為了在已經繪制的曲線圖中找一個空地方標上一行文本,只要使用如下程序:
text(locator(1), "Normal density", adj=0)
text()函數的adj參數用一個數字表示文本串相對于給定的坐標的畫法,adj=0表示給定坐標為文本串左側的坐標,adj=1表示給定坐標為文本串右側的坐標,adj=0.5表示給定坐標為文本串中間的坐標。
函數identify(x, y, labels)在運行時也會停下來等待用戶點擊,直到按了鼠標中鍵,任何返回用戶在圖形中用鼠標點擊的點的序號,點擊時對點擊的點加標簽。參數x和y給出要識別的各個點的坐標。labels參數指定點擊某個點時要在旁邊繪制的文本標簽,缺省時標出此點的序號,如果只需要返回值而不想畫任何標記則可以在調用此函數時加一個plot=F參數。
注意identify()與locator()不同,locator()返回圖中任意點擊位置的坐標,而identify() 只返回離點擊位置最近的點的序號。例如,我們在向量x和y中有若干個點的坐標,運行如下程序:
attach(cl) plot(Height, Weight) ; identify(Height,Weight)
這時顯示轉移到圖形窗口,進入等待狀態,用戶可以點擊圖中特別的點,該點的序號就會在旁邊標出。為了結束,只要單擊鼠標中鍵或單擊右鍵并選擇停止。返回結果為你點擊的各個點的序號:
警告: 已經找到了最近的點
警告: 沒有0.25英尺的點
[1] 1 2 10 15 16
hist(x)作向量x的直方圖。缺省時自動確定分組,也可以用nclass=參數指定分組個數,或者用breaks=參數指定一個分組點向量。如果指定了prob=T則縱軸顯示密度估計。
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
箱線圖的圖形中的參數意義如下:
例子: 作了兩個圖疊加,一個為subset= supp == “VC“,另一個為subset= supp == ”OJ“.數據ToothGrowth有兩個數量變量(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");
attach(cl) coplot(Weight ~ Height | Sex)
如果z是一個數值型變量,則coplot() 先對z的取值分組,然后對z的每一組取值分別繪圖。
甚至可以用如coplot(y~x | x1+x2)表示對x1和x2的每一水平組合繪圖。
coplot()和pairs()函數缺省繪制散點圖,但可以用一個panel= 參數指定其它的低級繪圖函數,如lines,panel.smooth等。
tsplot(x)繪制時間序列曲線圖。多個參數時tsplot(x1, x2, ...)表示繪制多條曲線,自動統一曲線取值范圍。如果參數非時間序列對象則以下標1,2,3等為橫坐標繪圖。
- qqnorm(x), qqline(x), qqplot(x,y)作分位數-分位數圖。
- qqnorm(x)對向量x作正態概率(縱軸為次序統計量值,橫軸為對應該次序統計量的標準正態分布分位數值)。
- qqline(x) 除作qqnorm(x)圖之外還畫一條擬合曲線。
qqplot(x,y)把x和y的次序統計量分別畫在x軸和y 軸以比較兩個變量的分布。
x <- rnorm(50) y <- rexp(60) qqplot(x,y)#可以判斷是不是同一個類型的分布
par(mfrow=c(2,2))#準備畫2?2的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!") #在點擊的兩個位置寫入文字
#畫圖 (對數變換后) 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 #畫圖 (對數變換后) plot(log(body),log(brain)) identify(log(body),log(brain),row.names(Animals))
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()
高級低級函數畫圖
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)")
x=runif(100) x=ts(x,start=1960+(3/12),frequency=12)#構造時間序列frequency=12即按個月份構造 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")
到此,相信大家對“R語言怎么使用畫圖函數與多圖多線”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。