日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

R語言(繪圖入門)

 昵稱62030091 2019-10-23

原文鏈接:https://wklchris./R-plotting-basic.html

R 的繪圖功能一直為業(yè)內(nèi)所津津樂道。用了 Python 的 matplolibt 和 R 的 ggplot2 后,我再也不想用 MATLAB 畫圖了。

我現(xiàn)在這里先給出本博文用到的包:

library(Hmisc)
Loading required package: lattice
Loading required package: survival
Loading required package: Formula
Loading required package: ggplot2

Attaching package: 'Hmisc'

The following objects are masked from 'package:base':

format.pval, round.POSIXt, trunc.POSIXt, units
library(vioplot)
Loading required package: sm
Package 'sm', version 2.2-5.4: type help(sm) for summary information

基礎(chǔ)命令

使用 dev.new() 命令新建一個圖片視圖,這樣你可以輸出多個圖片到屏幕,而不是讓之后輸出的覆蓋之前的圖形。關(guān)于 dev.next(), dev.prev(), dev.set() 及 dev.off() 等內(nèi)容,參考 help(dev.cur).

plot() 繪圖類型

基本的繪圖類型有以下幾種,使用 type= 參數(shù)指定:

  • p:僅數(shù)據(jù)點,默認值。

  • l:僅線段

  • b:線段與點

  • c:僅線段,但點的位置留出空白

  • o:線段與點,但線段會延伸到點內(nèi)部

  • h:直方圖風格,即帶豎直密度線

  • s:階梯圖

  • S:其他特殊情況

  • n;不繪制圖形。用于指定標題、坐標軸名稱的情況

輸出到文件

將畫圖的內(nèi)容輸出到文件,可以指定路徑,不指定就輸出到當前工作目錄。例如輸出 pdf:

pdf('plot.pdf')
plot(c(1, 2, 3), c(3, 4, 2))
dev.off()

除了 pdf() 外,其他可用的輸出格式對應(yīng)函數(shù):

  • wmf:win.metafile(),僅在 Windows 系統(tǒng)下使用

  • png: png()

  • jpeg: jpeg()

  • bmp: bmp()

  • tiff: tiff()

  • ps: postscript()

例子。詳細的參數(shù)在下文討論。

x <- 1:4y <- c(2, 4, 3, 1)plot(x, y, type='b')

繪圖參數(shù):par()

函數(shù) par() 用來獲取當前圖形的參數(shù)。如果加入 no.readonly=TRUE, 表示該參數(shù)列表是非只讀的,即用戶可以進行修改。例如對于上圖,我們獲取其參數(shù),進行更改后再傳到新的圖中(pch 參數(shù)可能有些費解,我們在下文討論):

# 方法一:類交互式的更改方法opar <- par(no.readonly=T)par(pch=17) # 更改點樣式plot(x, y, type='b')par(opar)# 方法二:部分繪圖參數(shù)支持直接傳入?yún)?shù)# plot(x, y, type='b', pch=17)

點樣式、線寬與線型

參數(shù)可選值
pch 點樣式0空方塊,1空圓,2空三角,3加號,4乘號,5斜空方塊,6空倒三角,7叉方塊,8星號,9斜叉方塊,10圈加號,11六芒星,12田,13圈乘號,14加框尖角,15方塊,16圓點,17三角,18斜方塊,19帶邊線圓點,20帶邊線2/3圓點,21填充圓,22填充方塊,23填充斜方塊,24填充三角,25填充倒三角。
cex 點大小數(shù)字,例如 0.5。
lty 線型1實線,2短虛線,3點線,4點劃線,5長虛線,6長短劃線。
lwd 線寬數(shù)字。

注: pch = 19 相比 pch = 16,主要體現(xiàn)在 lwd 與 cex 不同時,帶邊線圓點的尺寸較大。

顏色

調(diào)整顏色的參數(shù)有:

  • col: 繪圖顏色。

  • col.axis:坐標軸刻度顏色。

  • col.lab:坐標軸名稱顏色。

  • col.main:圖形標題顏色。

  • col.sub:副標題顏色。

  • fg:圖形前景色。

  • bf:圖形背景色。

指定顏色的方式有如下幾種:

  • 數(shù)字下標:col=1

  • 名稱:col=”white”

  • 十六進制值:col=”#FFFFFF”

  • 標準化RGB/HSV值:col=rgb(0,1,1)/hsv(0,0,1)

至于 R 支持的顏色名稱,多達 600 余種,這里給出一些我認為常見的:

OutputColors <- function(color.names, titleStr='', showText=F) {
plot(1,1, axes=F, xlim=c(0, 6), ylim=c(0, 6), main=titleStr, xlab='', ylab='')
for (i in c(1:5)) {
for (j in c(1:5)) {
par(new=T)
plot(i, 6-j, cex=3, xlim=c(0, 6), ylim=c(0, 6), axes=F,
main='', xlab='', ylab='', pch=19,
col=color.names[(i-1)*5+j])
if (showText) {
text(i, 6-j-0.1, pos=1, color.names[(i-1)*5+j])
}
}
}}colorLst <- c('white', 'red', 'green', 'blue', 'brown',
'cyan', 'gold', 'gray', 'plum', 'magenta',
'orange', 'purple', 'yellow', 'black', 'violet',
'darkblue', 'darkgreen', 'darkred', 'darkgray', 'dimgray',
'lightblue', 'lightgreen', 'lightgray', 'orchid', 'pink')OutputColors(colorLst, '25 Useful Colors', T)

R 中還有其他方式可以生成一系列的顏色,比如:

par(mfrow=c(2 ,3))OutputColors(rainbow(25), 'Rainbow')OutputColors(heat.colors(25), 'HeatMap')OutputColors(terrain.colors(25), 'TerrainMap')OutputColors(topo.colors(25), 'Topo')OutputColors(cm.colors(25), 'CM')# 灰度:需要標準化OutputColors(gray(1/25*c(0:25)), 'Gray')

標簽和標題文本

從上文可以看出端倪,標簽與標題參數(shù)有:

  • 標題/副標題:title/sub

  • 坐標軸標題:xlab/ylab

在標題中使用上文介紹的參數(shù):

title(main='My Title', col.main='red',
sub='My Subtitle', col.sub='blue',
xlab='My X label', ylab='My Y label',
col.lab='green', cex.lab=0.75)

要定義它們的字體,可添加的參數(shù)有:

參數(shù)含義
cex基礎(chǔ)縮放倍數(shù)
cex.axis坐標軸刻度的縮放倍數(shù)
cex.lab坐標軸標題的縮放倍數(shù)
cex.main圖形標題的縮放倍數(shù)
cex.sub圖形副標題的縮放倍數(shù)
font字體樣式。1常規(guī),2加粗,3加斜,4加粗加斜,5符號字體
font.axis坐標軸刻度的字體樣式
font.lab/ main/ sub類推
ps字體磅值。文字的最終大小為 cex * ps
family字族。例如 serif襯線, sans無襯線, mono等寬

字族的使用需要注意:Windows 中,等寬映射為 Courier New,襯線 Times New Roman,無襯線 Arial。你可以使用 windowsFonts() 函數(shù)來更改或者創(chuàng)建映射,例如我個人常用的 DejaVu 等寬字體:

windowsFonts(
M=windowsFont('DejaVu Sans Mono'))plot(1, 1, type='n')# 字體示例text(1, 1.05, paste('DejaVu Sans Mono\n',
'0123456789!@#$%^&*()[]{}:;,.<>'/?`~',
'abcdefghijklmnopqrstuvwxyz',
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
sep='\n'), pos=1, family='M')

如果你需要將圖片輸出到 pdf,這個參數(shù)也是可以使用的:

pdf(file='filename.pdf', family='M')

圖形尺寸與邊距

參數(shù) pin 用于指定圖形尺寸(英寸),例如 pin=c(4, 3) 表示 4 英寸寬 3 英寸高。

用 mai()/mar() 依次指定下左上右四個方向的邊距,單位分別是英寸與英分。默認是 mar(c(5, 4, 4, 2)) + 0.1

自定義其他元素

坐標軸

函數(shù) side() 用于自定義坐標軸:

axis(side, at=, labels=, pos=, lty=, col=, las=, tck=, ...)
  • side: 指定在哪繪制坐標軸:1下2左3上4右

  • at:刻度線位置

  • labels:刻度線旁的標簽,缺省時使用 at 中的值

  • pos:坐標軸與另一坐標軸相交位置的值

  • lty/col:線型/線與刻度的顏色

  • las:標簽平行于(=0)或垂直于(=2)坐標軸

  • tck:刻度線。負值表示在圖形外側(cè),0表示禁用刻度,1表示全長(即網(wǎng)格線);默認 -0.01

網(wǎng)格線:abline() 與次要刻度

如果想使用次要刻度,請安裝 Hmisc 包。次要刻度的長度將會是主刻度的 tick.ratio 倍。

網(wǎng)格線使用 abline() 命令,并分別用 h/v 指定網(wǎng)格線是豎直還是水平。

# 需要加載:library(Hmisc)plot(1:3, 1:3, type='b', xlim=c(0, 4), ylim=c(0, 4))minor.tick(nx=2, ny=4, tick.ratio=0.5)abline(v=seq(0, 4, 0.5), h=seq(0, 4, 0.25), lty=2, col='darkred')

圖例

命令 legend() 用于添加圖例。

legend(location, legend, [title=, ...])

參數(shù)含義:

  • location:指定圖例左上角的坐標,或者使用以下關(guān)鍵字:

    • 關(guān)鍵字:left/right, bottom/top, bottomleft/right, topleft/right, center

    • 如果使用了以上關(guān)鍵字,可以使用 inset= 參數(shù)指定向圖形內(nèi)移動的比例(分數(shù)形式)

  • legend:標簽組成的字符型向量。

  • title:圖例標題的字符串

  • 其他參數(shù):

    • col/pch/lwd/lty:圖例線條顏色/點樣式/線寬/線型

    • bty/fill:盒型樣式/顏色填充(用于條形圖、箱形圖或餅圖)

    • bg:背景色

    • text.col:文本顏色

    • horiz:TRUE 會將圖例水平放置

例子參見“直方圖”一節(jié)的最后一例。

標注

文字標注

主要有兩個函數(shù):text() 與 mtext()。前者向繪圖區(qū)添加標注,后者向圖形的邊界添加標注。

text(location, 'string', pos, ...)
mtext('string', side, line=n, ...)

可以參考“標簽和標題文本”一節(jié)的例子。其中:

  • pos:使用1下2左3上4右的對應(yīng)關(guān)系,比如“顏色”一節(jié)中就使用了 pos=1 的參數(shù)。

    • 如果指定了 pos,那么也可以指定 offset= 作為偏移量比值(相對單個字符寬)

  • side:指定放置文本的圖片邊界,同樣是1下2左3上4右。

    • 你可以使用 line= 來移動文本(正值向外,負值向內(nèi));

    • 還可以通過 adj=0/1 指定文本向左下/右上對齊。

數(shù)學標注

類似 LaTeX 的標注方式,不過實質(zhì)上仍有一些區(qū)別:

代碼效果代碼效果代碼效果
x%+-%yx±yx%/%yx÷yx%*%yx×y
x%.%yx?yx[i]xix^2x2
x%prop%yx∝ysqrt(x, y)y√xx!=yx≠y
x%~~%yx≈yx%=~%yx?yx%==%yx≡y

部分字體相關(guān)的命令:

  • plain(x):正體

  • italic(x):意大利字族(加斜)

  • bold(x):加粗

  • bolditalic(x):加斜加粗

  • underline(x):下劃線

疊加繪圖

疊加繪圖最簡單的方法,就是使用繪圖的 new=TRUE

plot( ... )plot( ... , new=TRUE) # 記得用 axes=FALSE 將坐標軸、標簽、標題隱藏掉

如果想要添加額外的點、線,使用 points() 命令與 lines() 命令。以及上面提到的參考線 abline() 命令:

plot(1:3, c(1,3,2), type='b', pch=2)points(1:3, seq(1.5, 2.5, 0.5), col='blue', pch=16)lines(1:3, seq(1.5, 2.5, 0.5), col='red')abline(v=1.5, h=2.25, lty=2,col='purple')

子圖

函數(shù) layout()

函數(shù) layout() 是一個強大的命令。例如:

layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE))

就指定了圖 1 占用第一行,圖 2 和 3 共用第二行。也可以用 widths=/heights= 參數(shù)指定各列寬/各行高之間的比例:

tmp <- c(rep('Cat', 3), rep('Dog', 4), rep('Rabbit', 2))dt <- table(tmp)layout(matrix(c(1, 1, 2, 3), 2, 2, byrow = TRUE),
widths=c(3, 1), heights=c(1, 2))barplot(dt)barplot(dt)barplot(dt)

函數(shù) par() 的 mfrow 參數(shù)

前文介紹過的 par() 中的 mfrow= 參數(shù)也是一個控制子圖的方式。下例是兩行兩列的子圖:

opar <- par(no.readonly=TRUE)
par(mfrow=c(2,2))
plot(...) # 圖 1,左上
plot(...) # 圖 2,右上
plot(...) # 圖 3,左下
plot(...) # 圖 4,右下
par(opar)

函數(shù) par() 的 fig 參數(shù)

這種方式支持你以任何的位置、組合任意的圖形。它比規(guī)整的 layout() 更加靈活。以下不使用 0.8 而使用 0.65 是為了看上去更緊湊。

opar <- par(no.readonly=TRUE)par(fig=c(0, 0.8, 0, 0.8))  # 主圖:橫向范圍與縱向范圍(左下為原點)barplot(dt)par(fig=c(0, 0.8, 0.65, 1), new=TRUE)  # 上方的圖。注意 new 參數(shù)barplot(dt, axes=F)par(fig=c(0.65, 1, 0, 0.8), new=TRUE)  # 右側(cè)的圖barplot(dt, axes=F, names.arg='')

統(tǒng)計圖

條形圖:barplot()

直接上例子。

tmp <- c(rep('Cat', 3), rep('Dog', 4), rep('Rabbit', 2))dt <- table(tmp)barplot(dt, main='Title of Barplot', xlab='Pets', ylab='Number',
col='green', border='blue', density=c(5, 15, 25),
names.arg=paste('Pet', 1:3, sep=' '))

餅圖:pie()

并不推薦的統(tǒng)計圖類型,因此 R 中的功能也很有限。

pie(x, labels=, ...)
dt <- 1:4lbl <- c('A', 'B', 'C', 'D')pie(dt, labels=paste(lbl, ' ', round(dt/sum(dt)*100), '%', sep=''),
col=topo.colors(length(lbl)), main='Pie Chart with Percentage')

直方圖:hist() 及核密度曲線

直方圖表示的是一維的數(shù)據(jù)(連續(xù)型)特征,縱軸是其在對應(yīng)橫軸區(qū)間內(nèi)的頻數(shù)或者頻率。

hist(x, freq=TRUE, breaks=, ...)

其中 freq 參數(shù)默認指定縱軸為頻數(shù)而不是頻率,break 用于指定橫軸上分組的個數(shù)。

set.seed(123)dt <- rnorm(100, mean=0, sd=1)par(mfrow=c(1,2))# 左圖:頻率直方圖,以及軸須圖hist(dt, freq=F, breaks=10, col='cyan', main='Hist fig 1')rug(jitter(dt)) # 如果有許多相同值,參數(shù) amount=0.01 可將其隨機化lines(density(dt), col='purple', lwd=2)# 右圖:頻數(shù)直方圖,以及正態(tài)密度曲線h.plot <- hist(dt, breaks=10, col='lightgreen', main='Hist fig 2')xfit <- seq(min(dt), max(dt), length.out=40)yfit <- dnorm(xfit, mean=mean(dt), sd=sd(dt))yfit <- yfit*diff(h.plot$mids[1:2])*length(dt)lines(xfit, yfit, col='blue', lwd=2)box()

軸須圖是一種一維的數(shù)據(jù)呈現(xiàn),而上面的左圖中的密度曲線是一種核密度估計。要比較核密度圖,參考 sm 包的 sm.density.compare() 函數(shù)。如果只是要繪制,使用 density() 函數(shù)輔助即可:

plot(density(dt), main='Kernel Denisty')polygon(density(dt), col='lightgreen', border='blue', lwd=2)  # 繪制多邊形的函數(shù)# 疊加正態(tài)曲線xfit <- seq(min(dt), max(dt), length.out=40)yfit <- dnorm(xfit, mean=mean(dt), sd=sd(dt))lines(xfit, yfit, col='red', lwd=2)legend('topright', lty=c(1,1), col=c('blue', 'red'),
legend=c('Kernel Density', 'Normality Curve'))

箱形圖:boxplot() 及小提琴圖

或者叫箱線圖、盒須圖。它描述了連續(xù)變量的五個特征參數(shù):

fig <- boxplot(dt, main='Box Plot')paras <- c('Min', '25 percentile', 'Mean', '75 percentile', 'Max')text(1.25, fig$stats, paras, pos=4)text(0.9, fig$out, 'Abnormal Points', pos=2)

如果是 dataframe 數(shù)據(jù)集中的類別型變量 A ,使用如下語句生成并列箱形圖:

boxplot(y~A, data=dataframe)

如果將公式改寫成 y~A*B,那么會將類別型變量 A 和 B 的各水平兩兩組合,再生成箱形圖。

其他參數(shù):

  • varwidth=F/T:為 TRUE 時,箱形圖的寬度與樣本數(shù)的算術(shù)平方根成正比。

  • horizontal=F/T:為 TRUE 時,箱形圖被橫置。

  • notch=F/T:為 TRUE 時,箱形圖在繪制時會顯示“凹槽”。

df <- data.frame(x=dt, type=NA)df <- df[order(df$x),]df$type <- c(rep('Smaller', 50), rep('Larger',50))boxplot(x ~ type, data=df, col='darkgray', main='Boxplot')

最后再提一下箱形圖與核密度圖的一個結(jié)合體:小提琴圖(violin plot)。這種圖的繪制需要 vioplot 包。

在小提琴圖中,核密度曲線被豎直放置,并對稱地顯示于數(shù)據(jù)軸的兩側(cè):

# 需要加載:library(vioplot)vioplot(df$x[df$type == 'Larger'], df$x[df$type == 'Smaller'],
names=c('L', 'S'), col='gold')

點圖

用于在水平刻度上繪制大量標簽。本例選自參考書目同名章節(jié)。各參數(shù):

  • groups:選定一個因子,作為分組依據(jù)。

  • gcolor:各組標簽的顏色。

# mtcars 是 R 預裝的數(shù)據(jù)集,其 cyl 變量有三個水平x <- mtcars[order(mtcars$mpg),]x$cyl <- factor(x$cyl)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 Models\ngrouped by cylinder',
xlab = 'Miles Per Gallon')

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多