R plot图片背景设置为透明_R语言(绘图入门)
原文鏈接:https://wklchris.github.io/R-plotting-basic.html
R 的繪圖功能一直為業(yè)內(nèi)所津津樂道。用了 Python 的 matplolibt 和 R 的 ggplot2 后,我再也不想用 MATLAB 畫圖了。
我現(xiàn)在這里先給出本博文用到的包:
libraryLoading required package: latticeLoading 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
libraryLoading required package: sm
Package 'sm', version 2.2-5.4: type help(sm) for summary information
基礎(chǔ)命令
使用?dev.new()?命令新建一個(gè)圖片視圖,這樣你可以輸出多個(gè)圖片到屏幕,而不是讓之后輸出的覆蓋之前的圖形。關(guān)于 dev.next(), dev.prev(), dev.set() 及 dev.off() 等內(nèi)容,參考 help(dev.cur).
plot() 繪圖類型
基本的繪圖類型有以下幾種,使用 type= 參數(shù)指定:
p:僅數(shù)據(jù)點(diǎn),默認(rèn)值。
l:僅線段
b:線段與點(diǎn)
c:僅線段,但點(diǎn)的位置留出空白
o:線段與點(diǎn),但線段會(huì)延伸到點(diǎn)內(nèi)部
h:直方圖風(fēng)格,即帶豎直密度線
s:階梯圖
S:其他特殊情況
n;不繪制圖形。用于指定標(biāo)題、坐標(biāo)軸名稱的情況
輸出到文件
將畫圖的內(nèi)容輸出到文件,可以指定路徑,不指定就輸出到當(dāng)前工作目錄。例如輸出 pdf:
pdf("plot.pdf")plot(c(1, 2, 3), c(3, 4, 2))
dev.off()
除了 pdf() 外,其他可用的輸出格式對(duì)應(yīng)函數(shù):
wmf:win.metafile(),僅在 Windows 系統(tǒng)下使用
png: png()
jpeg: jpeg()
bmp: bmp()
tiff: tiff()
ps: postscript()
例子。詳細(xì)的參數(shù)在下文討論。
x繪圖參數(shù):par()
函數(shù) par() 用來獲取當(dāng)前圖形的參數(shù)。如果加入 no.readonly=TRUE, 表示該參數(shù)列表是非只讀的,即用戶可以進(jìn)行修改。例如對(duì)于上圖,我們獲取其參數(shù),進(jìn)行更改后再傳到新的圖中(pch 參數(shù)可能有些費(fèi)解,我們?cè)谙挛挠懻?:
# 方法一:類交互式的更改方法點(diǎn)樣式、線寬與線型
| pch 點(diǎn)樣式 | 0空方塊,1空?qǐng)A,2空三角,3加號(hào),4乘號(hào),5斜空方塊,6空倒三角,7叉方塊,8星號(hào),9斜叉方塊,10圈加號(hào),11六芒星,12田,13圈乘號(hào),14加框尖角,15方塊,16圓點(diǎn),17三角,18斜方塊,19帶邊線圓點(diǎn),20帶邊線2/3圓點(diǎn),21填充圓,22填充方塊,23填充斜方塊,24填充三角,25填充倒三角。 |
| cex 點(diǎn)大小 | 數(shù)字,例如 0.5。 |
| lty 線型 | 1實(shí)線,2短虛線,3點(diǎn)線,4點(diǎn)劃線,5長(zhǎng)虛線,6長(zhǎng)短劃線。 |
| lwd 線寬 | 數(shù)字。 |
注: pch = 19 相比 pch = 16,主要體現(xiàn)在 lwd 與 cex 不同時(shí),帶邊線圓點(diǎn)的尺寸較大。
顏色
調(diào)整顏色的參數(shù)有:
col: 繪圖顏色。
col.axis:坐標(biāo)軸刻度顏色。
col.lab:坐標(biāo)軸名稱顏色。
col.main:圖形標(biāo)題顏色。
col.sub:副標(biāo)題顏色。
fg:圖形前景色。
bf:圖形背景色。
指定顏色的方式有如下幾種:
數(shù)字下標(biāo):col=1
名稱:col=”white”
十六進(jìn)制值:col=”#FFFFFF”
標(biāo)準(zhǔn)化RGB/HSV值:col=rgb(0,1,1)/hsv(0,0,1)
至于 R 支持的顏色名稱,多達(dá) 600 余種,這里給出一些我認(rèn)為常見的:
OutputColorsR 中還有其他方式可以生成一系列的顏色,比如:
par標(biāo)簽和標(biāo)題文本
從上文可以看出端倪,標(biāo)簽與標(biāo)題參數(shù)有:
標(biāo)題/副標(biāo)題:title/sub
坐標(biāo)軸標(biāo)題:xlab/ylab
在標(biāo)題中使用上文介紹的參數(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ù)有:
| cex | 基礎(chǔ)縮放倍數(shù) |
| cex.axis | 坐標(biāo)軸刻度的縮放倍數(shù) |
| cex.lab | 坐標(biāo)軸標(biāo)題的縮放倍數(shù) |
| cex.main | 圖形標(biāo)題的縮放倍數(shù) |
| cex.sub | 圖形副標(biāo)題的縮放倍數(shù) |
| font | 字體樣式。1常規(guī),2加粗,3加斜,4加粗加斜,5符號(hào)字體 |
| font.axis | 坐標(biāo)軸刻度的字體樣式 |
| font.lab/ main/ sub | 類推 |
| ps | 字體磅值。文字的最終大小為 cex * ps |
| family | 字族。例如 serif襯線, sans無襯線, mono等寬 |
字族的使用需要注意:Windows 中,等寬映射為 Courier New,襯線 Times New Roman,無襯線 Arial。你可以使用 windowsFonts() 函數(shù)來更改或者創(chuàng)建映射,例如我個(gè)人常用的 DejaVu 等寬字體:
windowsFonts如果你需要將圖片輸出到 pdf,這個(gè)參數(shù)也是可以使用的:
pdf(file="filename.pdf", family="M")圖形尺寸與邊距
參數(shù) pin 用于指定圖形尺寸(英寸),例如?pin=c(4, 3)?表示 4 英寸寬 3 英寸高。
用 mai()/mar() 依次指定下左上右四個(gè)方向的邊距,單位分別是英寸與英分。默認(rèn)是?mar(c(5, 4, 4, 2)) + 0.1
自定義其他元素
坐標(biāo)軸
函數(shù) side() 用于自定義坐標(biāo)軸:
axis(side, at=, labels=, pos=, lty=, col=, las=, tck=, ...)side: 指定在哪繪制坐標(biāo)軸:1下2左3上4右
at:刻度線位置
labels:刻度線旁的標(biāo)簽,缺省時(shí)使用 at 中的值
pos:坐標(biāo)軸與另一坐標(biāo)軸相交位置的值
lty/col:線型/線與刻度的顏色
las:標(biāo)簽平行于(=0)或垂直于(=2)坐標(biāo)軸
tck:刻度線。負(fù)值表示在圖形外側(cè),0表示禁用刻度,1表示全長(zhǎng)(即網(wǎng)格線);默認(rèn) -0.01
網(wǎng)格線:abline() 與次要刻度
如果想使用次要刻度,請(qǐng)安裝 Hmisc 包。次要刻度的長(zhǎng)度將會(huì)是主刻度的?tick.ratio?倍。
網(wǎng)格線使用 abline() 命令,并分別用 h/v 指定網(wǎng)格線是豎直還是水平。
# 需要加載:library(Hmisc)圖例
命令 legend() 用于添加圖例。
legend(location, legend, [title=, ...])參數(shù)含義:
location:指定圖例左上角的坐標(biāo),或者使用以下關(guān)鍵字:
關(guān)鍵字:left/right, bottom/top, bottomleft/right, topleft/right, center
如果使用了以上關(guān)鍵字,可以使用 inset= 參數(shù)指定向圖形內(nèi)移動(dòng)的比例(分?jǐn)?shù)形式)
legend:標(biāo)簽組成的字符型向量。
title:圖例標(biāo)題的字符串
其他參數(shù):
col/pch/lwd/lty:圖例線條顏色/點(diǎn)樣式/線寬/線型
bty/fill:盒型樣式/顏色填充(用于條形圖、箱形圖或餅圖)
bg:背景色
text.col:文本顏色
horiz:TRUE 會(huì)將圖例水平放置
例子參見“直方圖”一節(jié)的最后一例。
標(biāo)注
文字標(biāo)注
主要有兩個(gè)函數(shù):text() 與 mtext()。前者向繪圖區(qū)添加標(biāo)注,后者向圖形的邊界添加標(biāo)注。
text(location, "string", pos, ...)mtext("string", side, line=n, ...)
可以參考“標(biāo)簽和標(biāo)題文本”一節(jié)的例子。其中:
pos:使用1下2左3上4右的對(duì)應(yīng)關(guān)系,比如“顏色”一節(jié)中就使用了 pos=1 的參數(shù)。
如果指定了 pos,那么也可以指定 offset= 作為偏移量比值(相對(duì)單個(gè)字符寬)
side:指定放置文本的圖片邊界,同樣是1下2左3上4右。
你可以使用 line= 來移動(dòng)文本(正值向外,負(fù)值向內(nèi));
還可以通過 adj=0/1 指定文本向左下/右上對(duì)齊。
數(shù)學(xué)標(biāo)注
類似 LaTeX 的標(biāo)注方式,不過實(shí)質(zhì)上仍有一些區(qū)別:
| x%+-%y | x±y" role="presentation" style="display: inline-block; line-height: 0; text-align: left; font-size: 18.72px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-bottom: 1px;">x±yx±y | x%/%y | x÷y" role="presentation" style="display: inline-block; line-height: 0; text-align: left; font-size: 18.72px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-bottom: 1px;">x÷yx÷y | x%*%y | x×y" role="presentation" style="display: inline-block; line-height: 0; text-align: left; font-size: 18.72px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-bottom: 1px;">x×yx×y |
| x%.%y | x?y" role="presentation" style="display: inline-block; line-height: 0; text-align: left; font-size: 18.72px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-bottom: 1px;">x?yx?y | x[i] | xi" role="presentation" style="display: inline-block; line-height: 0; text-align: left; font-size: 18.72px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-bottom: 1px;">xixi | x^2 | x2" role="presentation" style="display: inline-block; line-height: 0; text-align: left; font-size: 18.72px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-bottom: 1px;">x2x2 |
| x%prop%y | x∝y" role="presentation" style="display: inline-block; line-height: 0; text-align: left; font-size: 18.72px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-bottom: 1px;">x∝yx∝y | sqrt(x, y) | xy" role="presentation" style="display: inline-block; line-height: 0; text-align: left; font-size: 18.72px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-bottom: 1px;">y√xxy | x!=y | x≠y" role="presentation" style="display: inline-block; line-height: 0; text-align: left; font-size: 18.72px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-bottom: 1px;">x≠yx≠y |
| x%~~%y | x≈y" role="presentation" style="display: inline-block; line-height: 0; text-align: left; font-size: 18.72px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-bottom: 1px;">x≈yx≈y | x%=~%y | x?y" role="presentation" style="display: inline-block; line-height: 0; text-align: left; font-size: 18.72px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-bottom: 1px;">x?yx?y | x%==%y | x≡y" role="presentation" style="display: inline-block; line-height: 0; text-align: left; font-size: 18.72px; overflow-wrap: normal; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-bottom: 1px;">x≡yx≡y |
部分字體相關(guān)的命令:
plain(x):正體
italic(x):意大利字族(加斜)
bold(x):加粗
bolditalic(x):加斜加粗
underline(x):下劃線
疊加繪圖
疊加繪圖最簡(jiǎn)單的方法,就是使用繪圖的?new=TRUE:
plot如果想要添加額外的點(diǎn)、線,使用?points()?命令與?lines()?命令。以及上面提到的參考線?abline()?命令:
plot子圖
函數(shù) layout()
函數(shù) layout() 是一個(gè)強(qiáng)大的命令。例如:
layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE))就指定了圖 1 占用第一行,圖 2 和 3 共用第二行。也可以用 widths=/heights= 參數(shù)指定各列寬/各行高之間的比例:
tmp函數(shù) par() 的 mfrow 參數(shù)
前文介紹過的 par() 中的 mfrow= 參數(shù)也是一個(gè)控制子圖的方式。下例是兩行兩列的子圖:
opar 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統(tǒng)計(jì)圖
條形圖:barplot()
直接上例子。
tmp餅圖:pie()
并不推薦的統(tǒng)計(jì)圖類型,因此 R 中的功能也很有限。
piedt直方圖:hist() 及核密度曲線
直方圖表示的是一維的數(shù)據(jù)(連續(xù)型)特征,縱軸是其在對(duì)應(yīng)橫軸區(qū)間內(nèi)的頻數(shù)或者頻率。
hist其中 freq 參數(shù)默認(rèn)指定縱軸為頻數(shù)而不是頻率,break 用于指定橫軸上分組的個(gè)數(shù)。
set.seed軸須圖是一種一維的數(shù)據(jù)呈現(xiàn),而上面的左圖中的密度曲線是一種核密度估計(jì)。要比較核密度圖,參考 sm 包的 sm.density.compare() 函數(shù)。如果只是要繪制,使用 density() 函數(shù)輔助即可:
plot箱形圖:boxplot() 及小提琴圖
或者叫箱線圖、盒須圖。它描述了連續(xù)變量的五個(gè)特征參數(shù):
fig如果是 dataframe 數(shù)據(jù)集中的類別型變量 A ,使用如下語句生成并列箱形圖:
boxplot(y~A, data=dataframe)如果將公式改寫成?y~A*B,那么會(huì)將類別型變量 A 和 B 的各水平兩兩組合,再生成箱形圖。
其他參數(shù):
varwidth=F/T:為 TRUE 時(shí),箱形圖的寬度與樣本數(shù)的算術(shù)平方根成正比。
horizontal=F/T:為 TRUE 時(shí),箱形圖被橫置。
notch=F/T:為 TRUE 時(shí),箱形圖在繪制時(shí)會(huì)顯示“凹槽”。
最后再提一下箱形圖與核密度圖的一個(gè)結(jié)合體:小提琴圖(violin plot)。這種圖的繪制需要 vioplot 包。
在小提琴圖中,核密度曲線被豎直放置,并對(duì)稱地顯示于數(shù)據(jù)軸的兩側(cè):
# 需要加載:library(vioplot)點(diǎn)圖
用于在水平刻度上繪制大量標(biāo)簽。本例選自參考書目同名章節(jié)。各參數(shù):
groups:選定一個(gè)因子,作為分組依據(jù)。
gcolor:各組標(biāo)簽的顏色。
猜你可能喜歡
MySQL 面試之必會(huì)知識(shí)點(diǎn)
R語言文本分詞之——Rwordseg包
Python科學(xué)計(jì)算:pandas
Python科學(xué)計(jì)算:numpy
kmeans算法python代碼——可直接運(yùn)行
梯度下降算法
總結(jié)
以上是生活随笔為你收集整理的R plot图片背景设置为透明_R语言(绘图入门)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: opencv 模板匹配(cvMatchT
- 下一篇: 用OPENCV视觉解数独