感謝Robert I.Kabacoff 著作本書榔昔,同時(shí)感謝高濤驹闰、肖楠、陳鋼編譯此書撒会。
最近在學(xué)習(xí)《R語(yǔ)言實(shí)戰(zhàn)》嘹朗,特將學(xué)習(xí)過(guò)程記錄下來(lái),供各位朋友參考诵肛,雖說(shuō)是筆記屹培,但是90%是書中內(nèi)容,另外10%是自己偶爾冒出的一點(diǎn)點(diǎn)想法的記錄和一些疑問(wèn)怔檩,希望互相探討褪秀。末尾有本章的代碼清單下載地址,與各位交流薛训,還是提倡按照書中內(nèi)容把代碼一個(gè)個(gè)敲出來(lái)媒吗。
第三章 圖形初階
本章內(nèi)容
圖形的創(chuàng)建與保存
自定義符號(hào)、線條乙埃、顏色和坐標(biāo)軸
標(biāo)注文本和標(biāo)題
控制圖形維度
組合多個(gè)圖形
3.1 使用圖形
在通常的交互式會(huì)話中闸英,你可以通過(guò)逐條輸入語(yǔ)句構(gòu)建圖形,逐漸完善圖形特征介袜,直至得到想要的結(jié)果甫何。
在通過(guò)代碼保存圖形時(shí),將繪圖語(yǔ)句夾在開啟目標(biāo)圖形設(shè)備的語(yǔ)句和關(guān)閉目標(biāo)圖形設(shè)備的語(yǔ)句直接即可遇伞。
通常繪制新圖形時(shí)辙喂,會(huì)覆蓋掉之前的圖形,有三種方法能保證創(chuàng)建多個(gè)圖形并隨時(shí)查看每一個(gè)赃额。
- 第一種:在創(chuàng)建一個(gè)新圖形之前加派,打開一個(gè)新的圖形窗口:
dev.new()
statements to creat graph 1
dev.new()
statements to creat graph 2
etc
每一幅新圖形將出現(xiàn)在最近一次打開的窗口中。
第二種:通過(guò)圖形用戶界面查看多個(gè)圖形跳芳。
在windows上分為兩步,在打開第一個(gè)圖形窗口以后勾選歷史(History)→記錄(Recording)竹勉,然后使用菜單中的上一個(gè)(Previous)和下一個(gè)(Next)來(lái)逐個(gè)查看已經(jīng)繪制的圖形飞盆。第三種:使用函數(shù)dev.new()、dev.next()次乓、dev/prev()吓歇、dev.set()和dev.off()同時(shí)打開多個(gè)圖形窗口,并選擇將哪個(gè)輸出發(fā)送到哪個(gè)窗口中票腰,這種方法全平臺(tái)適用城看。
3.2 一個(gè)簡(jiǎn)單的例子
在plot(x,y,type = "b")中,type的類型有9種杏慰。分別繪制不同的圖形测柠。
b
c
h
l
o
p
大S
小s
其中o和b炼鞠、大S和小s需要特別注意一下,仔細(xì)觀察圖形轰胁,注意他們的不同點(diǎn)谒主。
3.3 圖形參數(shù)
第一種方法是使用par()函數(shù),來(lái)指定圖形的多個(gè)特征(字體赃阀、顏色霎肯、坐標(biāo)軸、標(biāo)題)榛斯。這種方法的特點(diǎn)是:除非秀給其中參數(shù)观游,否則將在會(huì)話結(jié)束前一直有效。
par(optionname = value,optionname = name,…)
如果不加參數(shù)地執(zhí)行par()將生成一個(gè)含有當(dāng)前圖形參數(shù)設(shè)置的列表驮俗。添加參數(shù)no.readonly = TRUE可以生成一個(gè)可以修改的當(dāng)前圖形參數(shù)列表备典。
第二種方法是為高級(jí)繪圖函數(shù)直接提供optionname = value的鍵值對(duì)。僅對(duì)當(dāng)前圖形有效意述。代碼:
plot(dose,drugA,type = "b",lty = 2,pch = 17)
并不是所有的高級(jí)繪圖函數(shù)都允許指定全部可能的圖形參數(shù)提佣,需要參考函數(shù)的幫助來(lái)確定哪些參數(shù)可以通過(guò)這種方式設(shè)置。
3.3.1 符號(hào)和線條
pch : 指定繪制點(diǎn)時(shí)使用的符號(hào)荤崇。(書中P45)
cex : 指定符號(hào)的大小拌屏,cex是一個(gè)數(shù)值,表示繪圖符號(hào)相對(duì)于默認(rèn)大小的縮放倍數(shù)术荤,默認(rèn)大小為1倚喂。1.
lty : 指定線條類型。(書中P46)
lwd : 指定線條寬度瓣戚。lwd是以默認(rèn)值的相對(duì)大小來(lái)表示的(默認(rèn)值為1)
對(duì)于pch=21~25端圈,還可以指定便捷顏色(col = )和填充色(bg = )
3.3.2 顏色
3.3.3 文本屬性
par(font.lab = 3, cex.lab = 2, font.main = 4, cex.main = 2)
為何在文本屬性的設(shè)置中,沒(méi)有僅對(duì)當(dāng)前圖形設(shè)置生效的方法子库?
3.3.4 圖形尺寸與邊界尺寸
- pin 以英寸表示的圖形尺寸
- mai 以數(shù)值向量表示的邊界大小舱权,順序?yàn)椤跋隆⒆舐匦帷⑸涎绫丁⒂摇保瑔挝粸橛⒋纭?/li>
- mar 以數(shù)值向量表示的邊界大小仓技,順序?yàn)椤跋峦冶帷⒆蟆⑸喜蹦怼⒂摇崩疲瑔挝粸橛⒎帧DJ(rèn)值為c(5地沮,4嗜浮,4羡亩,2)+0.1
一英分等于十二分之一英寸。
按照代碼清單做一遍的同時(shí)周伦,先自己理解每一句的含義夕春,再看書中的解釋。
3.4 添加文本专挪、自定義坐標(biāo)軸和圖例
有些高級(jí)繪圖函數(shù)允許自行設(shè)定坐標(biāo)軸和文本標(biāo)注選項(xiàng)及志。書中例子為圖形添加了
標(biāo)題 main
副標(biāo)題 sub
坐標(biāo)軸標(biāo)簽 xlab、ylab
坐標(biāo)軸范圍 xlim寨腔、ylim
某些高級(jí)繪圖函數(shù)已經(jīng)包含了默認(rèn)的標(biāo)題和標(biāo)簽速侈。可以通過(guò)plot()語(yǔ)句或單獨(dú)的par()語(yǔ)句中添加ann=FLASE來(lái)移除他們迫卢。
3.4.1 標(biāo)題
使用title()函數(shù)為圖形添加標(biāo)題和坐標(biāo)軸標(biāo)簽倚搬。調(diào)用格式為:
title(main = "main title", sub = "sub-title", xlab = "x-axis label", ylab = "y=axis label")
3.4.2 坐標(biāo)軸
可以使用函數(shù)axis()來(lái)創(chuàng)建中自定義的坐標(biāo)軸,而非使用R中的默認(rèn)坐標(biāo)軸乾蛤。其格式為:
axis(side, at = , labels = , pos = , lty = ,col = , las = , tck = , …)
參數(shù)axes=FALSE將禁用高級(jí)繪圖函數(shù)自動(dòng)生成的坐標(biāo)軸每界。包括坐標(biāo)軸框架線。
參數(shù)frame.plot=TRUE將恢復(fù)坐標(biāo)軸框架線家卖。
參數(shù)xaxt="n"和yaxt="n"將分別禁用X軸和Y軸眨层,會(huì)留下框架線,只是去除了刻度上荡。
在代碼清單中趴樱,有一個(gè)round()函數(shù),其主要作用是取兩位小數(shù)酪捡。如round(1.235, digits = 2)返回的值為:1.24叁征。其中digits可省略,直接寫成round(1.235,2)逛薇。
次要刻度線
添加次要刻度線捺疼,需要使用Hmisc包中的mino.tick()函數(shù),在載入Hmisc包之前金刁,需載入lattice帅涂、survival、Formula尤蛮、ggplot2包。
minor.tick(nx = n, ny = n, tick.ratio = n)
nx和ny分別指定了X軸和Y軸每?jī)蓷l主刻度線之間通過(guò)次要刻度線劃分得到的區(qū)間個(gè)數(shù)斯议。tick.ratio表示次要刻度線相對(duì)于主刻度線的大小比例产捞。當(dāng)前的主刻度線長(zhǎng)度可使用par("tck")獲取。
3.4.3 參考線
abline(h = yvalues, v = xvalues)
為圖形添加參考線哼御。也可以指定其他圖形參數(shù)(線條類型坯临,顏色和寬度等等)
注意:在輸入書中兩串代碼時(shí)焊唬,得到的結(jié)果并不是,如圖中所說(shuō)的位置添加了參考線看靠,反而在意料之外的位置赶促,出現(xiàn)了兩條線,這是為什么挟炬?復(fù)習(xí)時(shí)鸥滨,需要重新檢查。
3.4.4 圖例
使用legend()函數(shù)來(lái)添加圖例谤祖。格式如下:
legend(location, title, legend, …)
3.4.5 文本標(biāo)注
text()和mtext()函數(shù)婿滓。text()函數(shù)還可以標(biāo)示圖形中的點(diǎn)。我們只需要制定一系列x粥喜,y坐標(biāo)作為位置參數(shù)凸主,同時(shí)以向量的形式指定要放置的文本。x额湘、y和文本標(biāo)簽向量的長(zhǎng)度應(yīng)當(dāng)相同卿吐。
數(shù)學(xué)標(biāo)注
使用類似于TeX中的寫法為圖形添加數(shù)學(xué)符號(hào)和公式。請(qǐng)參閱help(plotmatch)以獲得更多的細(xì)節(jié)和示例锋华。
3.5 圖形的組合
可以在par()函數(shù)中使用圖形參數(shù)mfrow=c(nrows, ncols)來(lái)創(chuàng)建按行填充的嗡官、行數(shù)為nrows、列數(shù)為ncols的圖形矩陣供置。也可以使用mfcol=c(nrows,ncols)按列填充矩陣谨湘。
代碼清單3-4展示了圖形布局的精細(xì)控制,我們可隨自己的想法調(diào)整想要展示的圖形芥丧。
問(wèn):P61中的第二行代碼紧阔,創(chuàng)建一個(gè)矩陣式什么意思?