R語(yǔ)言實(shí)戰(zhàn)—2

圖形初階

pdf("mygraph.pdf")      
 attach(mtcars)       #綁定了數(shù)據(jù)框mtcars
 plot(wt, mpg)             #繪制散點(diǎn)圖
 abline(lm(mpg~wt))      #向圖形添加了一條最優(yōu)擬合曲線
 title("Regression of MPG on Weight")      #添加了標(biāo)題
 detach(mtcars)      #為數(shù)據(jù)框解除了綁定
dev.off()

通過執(zhí)行如plot()诵次、hist()(繪制直方圖)或boxplot()這樣的高級(jí)繪圖命令來(lái)創(chuàng)建一幅新圖形時(shí)愈魏,通常會(huì)覆蓋掉先前的圖形母市。如何才能創(chuàng)建多個(gè)圖形并隨時(shí)查看每一個(gè)呢灾票?
dev.new()
statements to create graph 1
dev.new()
statements to create a graph 2
etc.

plot(x, y, type="b")將x置于橫軸摇邦,將y置于縱軸此改,繪制點(diǎn)集(x, y)趾撵,然后使用線段將其連接。選項(xiàng)type="b"表示同時(shí)繪制點(diǎn)和線共啃。

可以通過修改稱為圖形參數(shù)的選項(xiàng)來(lái)自定義一幅圖形的多個(gè)特征(字體占调、顏色、坐標(biāo)軸移剪、標(biāo)簽)究珊。
一種方法是通過函數(shù)par()來(lái)指定這些選項(xiàng)。以這種方式設(shè)定的參數(shù)值除非被再次修改纵苛,否則將在會(huì)話結(jié)束前一直有效剿涮。
其調(diào)用格式為par(optionname=value,optionname=name,...)。
不加參數(shù)地執(zhí)行par()將生成一個(gè)含有當(dāng)前圖形參數(shù)設(shè)置的列表攻人。
添加參數(shù)no.readonly=TRUE可以生成一個(gè)可以修改的當(dāng)前圖形參數(shù)列表取试。

opar <- par(no.readonly=TRUE)        #復(fù)制了一份當(dāng)前的圖形參數(shù)設(shè)置
par(lty=2, pch=17)        #將默認(rèn)的線條類型修改為虛線(lty=2),并將默認(rèn)的點(diǎn)符號(hào)改為了實(shí)心三角(pch=17)
plot(dose, drugA, type="b")        
par(opar)        #還原了原始設(shè)置

第二種方法是為高級(jí)繪圖函數(shù)直接提供optionname=value的鍵值對(duì)怀吻。這種情況下瞬浓,指定的選項(xiàng)僅對(duì)這幅圖形本身有效:plot(dose, drugA, type="b", lty=2, pch=17)


可以通過顏色下標(biāo)、顏色名稱蓬坡、十六進(jìn)制的顏色值猿棉、RGB值或HSV值來(lái)指定顏色。舉例來(lái)說(shuō)渣窜,col=1铺根、col="white"、col="#FFFFFF"乔宿、col=rgb(1,1,1)和col=hsv(0,0,1)都是表示白色的等價(jià)方式位迂。



3-1 使用圖形參數(shù)控制圖形外觀
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))        #修改了默認(rèn)的圖形參數(shù):2英寸寬、3英寸高
par(lwd=2, cex=1.5)      #線條的寬度將為默認(rèn)寬度的兩倍,符號(hào)將為默認(rèn)大小的1.5倍
par(cex.axis=.75, font.axis=3)      #坐標(biāo)軸刻度文本被設(shè)置為斜體掂林、縮小為默認(rèn)大小的75%
plot(dose, drugA, type="b", pch=19, lty=2, col="red")      #使用紅色實(shí)心圓圈和虛線創(chuàng)建第一幅圖形
plot(dose, drugB, type="b", pch=23, lty=6, col="blue",bg="green")      #使用綠色填充的綠色菱形加藍(lán)色邊框和藍(lán)色虛線創(chuàng)建第二幅圖形
par(opar)

某些高級(jí)繪圖函數(shù)已經(jīng)包含了默認(rèn)的標(biāo)題和標(biāo)簽臣缀。你可以通過在plot()語(yǔ)句或單獨(dú)的par()語(yǔ)句中添加ann=FALSE來(lái)移除它們。
可以使用title()函數(shù)為圖形添加標(biāo)題和坐標(biāo)軸標(biāo)簽泻帮。調(diào)用格式為:title(main="main title", sub="subtitle",xlab="x-axis label", ylab="y-axis label")
舉例來(lái)說(shuō)精置,以下代碼將生成紅色的標(biāo)題和藍(lán)色的副標(biāo)題,以及比默認(rèn)大小小25%的綠色x軸锣杂、y軸標(biāo)簽:
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ù)axis()來(lái)創(chuàng)建自定義的坐標(biāo)軸脂倦,其格式為:
axis(side, at=, labels=, pos=, lty=, col=, las=, tck=, ...)

創(chuàng)建自定義坐標(biāo)軸時(shí),你應(yīng)當(dāng)禁用高級(jí)繪圖函數(shù)自動(dòng)生成的坐標(biāo)軸元莫。參數(shù)axes=FALSE將禁用全部坐標(biāo)軸(包括坐標(biāo)軸框架線赖阻,除非你添加了參數(shù)frame.plot=TRUE)。參數(shù)xaxt="n"yaxt="n"將分別禁用X軸或Y軸(會(huì)留下框架線踱蠢,只是去除了刻度)火欧。

3-2 自定義坐標(biāo)軸的示例
x <- c(1:10)
y <- x
z <- 10/x
opar <- par(no.readonly=TRUE)
par(mar=c(5, 4, 4, 8) + 0.1)     #增加邊界大小
plot(x, y, type="b",pch=21, col="red",yaxt="n", lty=3, ann=FALSE)
lines(x, z, type="b", pch=22, col="blue", lty=2)    #添加x對(duì)1/x的直線
axis(2, at=x, labels=x, col.axis="red", las=2)      #繪制坐標(biāo)軸
axis(4, at=z, labels=round(z, digits=2),col.axis="blue", las=2, cex.axis=0.7, tck=-.01)mtext("y=1/x", side=4, line=3, cex.lab=1, las=2, col="blue")     #添加標(biāo)題和文本
title("An Example of Creative Axes",
xlab="X values",
ylab="Y=X")
par(opar)

創(chuàng)建次要刻度線,需要使用Hmisc包中的minor.tick()函數(shù)茎截。
library(Hmisc)
minor.tick(nx=n, ny=n, tick.ratio=n)
其中nx和ny分別指定了X軸和Y軸每?jī)蓷l主刻度線之間通過次要刻度線劃分得到的區(qū)間個(gè)數(shù)苇侵。tick.ratio表示次要刻度線相對(duì)于主刻度線的大小比例。當(dāng)前的主刻度線長(zhǎng)度可以使用par("tck")獲取企锌。舉例來(lái)說(shuō)榆浓,下列語(yǔ)句將在X軸的每?jī)蓷l主刻度線之間添加1條次要刻度線,并在Y軸的每?jī)蓷l主刻度線之間添加2條次要刻度線:
minor.tick(nx=2, ny=3, tick.ratio=0.5)
次要刻度線的長(zhǎng)度將是主刻度線的一半撕攒。

abline()可以用來(lái)為圖形添加參考線哀军。abline(h=yvalues, v=xvalues)
legend()添加圖例。legend(location, title, legend, ...)

3-3 
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(lwd=2, cex=1.5, font.lab=2)
plot(dose, drugA, type="b",pch=15, lty=1, col="red", ylim=c(0, 60),main="Drug A vs. Drug B",xlab="Drug Dosage", ylab="Drug Response")
lines(dose, drugB, type="b",pch=17, lty=2, col="blue")
abline(h=c(30), lwd=1.5, lty=2, col="gray")      #添加參考線
library(Hmisc)           #添加次要刻度線
minor.tick(nx=3, ny=3, tick.ratio=0.5)    
legend("topleft", inset=.05, title="Drug Type", c("A","B"), lty=c(1, 2), pch=c(15, 17), col=c("red", "blue"))      #添加圖例
par(opar)

數(shù)text()和mtext()將文本添加到圖形上打却。text()可向繪圖區(qū)域內(nèi)部添加文本,而mtext()則向圖形的四個(gè)邊界之一添加文本谎倔。
text(location, "text to place", pos, ...)
mtext("text to place", side, line=n, ...)

#展示不同字體族
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,family="serif","Example of serif text")
par(opar)

除了用來(lái)添加文本標(biāo)注以外柳击,text()函數(shù)也通常用來(lái)標(biāo)示圖形中的點(diǎn)。
只需指定一系列的x片习、y坐標(biāo)作為位置參數(shù)捌肴,同時(shí)以向量的形式指定要放置的文本。
x藕咏、y和文本標(biāo)簽向量的長(zhǎng)度應(yīng)當(dāng)相同状知。
attach(mtcars)
plot(wt, mpg,
main="Mileage vs. Car Weight",
xlab="Weight", ylab="Mileage",
pch=18, col="blue")
text(wt, mpg,
row.names(mtcars),
cex=0.6, pos=4, col="red")
detach(mtcars)

使用函數(shù)par()或layout()可以容易地組合多幅圖形為一幅總括圖形。
par()函數(shù)中使用圖形參數(shù)mfrow=c(nrows, ncols)來(lái)創(chuàng)建按行填充的孽查、行數(shù)為nrows饥悴、列數(shù)為ncols的圖形矩陣。另外,可以使用mfcol=c(nrows, ncols)按列填充矩陣西设。
layout()的調(diào)用形式為layout(mat)瓣铣,其中的mat是一個(gè)矩陣,它指定了所要組合的多個(gè)圖形的所在位置贷揽。

#創(chuàng)建四幅圖形并將其排布在兩行兩列中
attach(mtcars)
opar <- par(no.readonly=TRUE)
par(mfrow=c(2,2))
plot(wt,mpg, main="Scatterplot of wt vs. mpg")
plot(wt,disp, main="Scatterplot of wt vs. disp")
hist(wt, main="Histogram of wt")
boxplot(wt, main="Boxplot of wt")
par(opar)
detach(mtcars)

#依三行一列排布三幅圖形
attach(mtcars)
opar <- par(no.readonly=TRUE)
par(mfrow=c(3,1))
hist(wt)     
#高級(jí)繪圖函數(shù)hist()包含了一個(gè)默認(rèn)的標(biāo)題(使用main=""可以禁用它棠笑,抑或使用ann=FALSE來(lái)禁用所有標(biāo)題和標(biāo)簽)
hist(mpg)
hist(disp)
par(opar)
detach(mtcars)

#layout()
attach(mtcars)
layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE))
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)

為了更精確地控制每幅圖形的大小,可以有選擇地在layout()函數(shù)中使用widths=和heights=兩個(gè)參數(shù)禽绪。其形式為:
? widths = 各列寬度值組成的一個(gè)向量
? heights = 各行高度值組成的一個(gè)向量
相對(duì)寬度可以直接通過數(shù)值指定蓖救,絕對(duì)寬度(以厘米為單位)可以通過函數(shù)lcm()來(lái)指定。

attach(mtcars)
layout(matrix(c(1, 1, 2, 3), 2, 2, byrow = TRUE),
widths=c(3, 1), heights=c(1, 2))
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)
#再次將一幅圖形置于第1行印屁,兩幅圖形置于第2行循捺。
#但第1行中圖形的高度是第2行中圖形高度的二分之一。
#除此之外库车,右下角圖形的寬度是左下角圖形寬度的三分之一
3-4 多幅圖形布局的精細(xì)控制
opar <- par(no.readonly=TRUE)
par(fig=c(0, 0.8, 0, 0.8))       #fig=的取值是一個(gè)形如c(x1, x2, y1, y2)的數(shù)值向量巨柒。
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$wt, horizontal=TRUE, axes=FALSE)   #在上方添加箱線圖
par(fig=c(0.65, 1, 0, 0.8), new=TRUE)
boxplot(mtcars$mpg, axes=FALSE)     #在右側(cè)添加箱線圖
mtext("Enhanced Scatterplot", side=3, outer=TRUE, line=-3)
par(opar)

fig=的取值是一個(gè)形如c(x1, x2, y1, y2)的數(shù)值向量。


第一個(gè)fig=將散點(diǎn)圖設(shè)定為占據(jù)橫向范圍0-0.8柠衍,縱向范圍0-0.8洋满。上方的箱線圖橫向占據(jù)0-0.8,縱向0.55-1珍坊。右側(cè)的箱線圖橫向占據(jù)0.65-1牺勾,縱向0-0.8。
fig=默認(rèn)會(huì)新建一幅圖形阵漏,所以在添加一幅圖到一幅現(xiàn)有圖形上時(shí)驻民,請(qǐng)?jiān)O(shè)定參數(shù)new=TRUE。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末履怯,一起剝皮案震驚了整個(gè)濱河市回还,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌叹洲,老刑警劉巖柠硕,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異运提,居然都是意外死亡蝗柔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門民泵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)癣丧,“玉大人,你說(shuō)我怎么就攤上這事栈妆⌒脖啵” “怎么了厢钧?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)掏呼。 經(jīng)常有香客問我坏快,道長(zhǎng)罕扎,這世上最難降的妖魔是什么骄噪? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮拜轨,結(jié)果婚禮上拾给,老公的妹妹穿的比我還像新娘祥得。我一直安慰自己,他們只是感情好蒋得,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布级及。 她就那樣靜靜地躺著,像睡著了一般额衙。 火紅的嫁衣襯著肌膚如雪饮焦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天窍侧,我揣著相機(jī)與錄音县踢,去河邊找鬼。 笑死伟件,一個(gè)胖子當(dāng)著我的面吹牛硼啤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播斧账,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谴返,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了咧织?” 一聲冷哼從身側(cè)響起嗓袱,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎习绢,沒想到半個(gè)月后索抓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡毯炮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耸黑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片桃煎。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖大刊,靈堂內(nèi)的尸體忽然破棺而出为迈,到底是詐尸還是另有隱情三椿,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布葫辐,位于F島的核電站搜锰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏耿战。R本人自食惡果不足惜蛋叼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望剂陡。 院中可真熱鬧狈涮,春花似錦、人聲如沸鸭栖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)晕鹊。三九已至松却,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間溅话,已是汗流浹背晓锻。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留公荧,地道東北人带射。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像循狰,于是被迫代替她去往敵國(guó)和親窟社。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355