第三章 圖形初階

數據可視化,絕對是一門藝術。完美的數據,需要有完美的圖片來展示。人類非常善于從視覺呈現中洞察關系。一幅精心繪制的圖形能夠幫助你在數以千計的零散信息中做出有意義的比較,提煉出使用其他方法時不那么容易發現的模式。而R具有頂尖水準的制圖功能,進行很好的可視化。


Twitter和Flickr的使用情況可視化,白色的是同時使用兩者,藍色的是Twitter,黃色的是Flickr
Facebook的使用情況
Meteor showers on Earth

3.1 使用圖形

R是一個驚艷的圖形構建平臺。在通常的交互式會話中,你可以通過逐條輸入語句構建圖形,逐漸完善圖形特征,直至得到想要的結果。

attach(mtcars)
plot(wt, mpg)
abline(lm(mpg~wt))
title("Regression of MPG on Weight")
detach(mtcars)

3.2 一個簡單的例子

病人對藥物的相應
# 數據導入R中
dose  <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)
# 繪圖,對藥物A的響應
plot(dose, drugA, type="b")
對藥物A的響應

plot()是一個函數,plot(x, y, type="b"),將x作為橫軸,y置于縱軸,繪制點集,連線。選項type=“b”表示同時繪制點和線,具體的可以用?plot查看幫助選項。

3.3.1 符號和線條

使用圖形參數來指定繪圖時使用的符號和線條類型。

圖形參數
pch種類,其中21-25可以使用col和bg來分別設置邊界顏色和填充色

3.3.2 顏色

在R語言中,可以通過下標、顏色名稱、十六進制的顏色值、RGB值或HSV值來指定顏色。函數colors()可以返回所有可用顏色的名稱。

# RColorBrewer 這個包是用來創建吸引人的顏色配對
install.packages("RColorBrewer")
library(RColorBrewer)
n <- 7
# 產生七種顏色的向量,
mycolors <- brewer.pal(n, "Set1")
# 最后畫出BAR圖
barplot(rep(1,n), col=mycolors)
顏色指定參數
RColorBrewer得到的7色bars

gray()函數可以生成多階灰度色,rainbow()可以生成連續的“彩虹型”顏色

n <- 10
mycolors <- rainbow(n)
pie(rep(1, n), labels=mycolors, col=mycolors)
mygrays <- gray(0:n/n)
pie(rep(1, n), labels=mygrays, col=mygrays)

rainbow()十色彩虹圖
gray()產生的10階灰度色

3.3.3 文本屬性

圖形參數同樣可以用來指定字號、字體和字樣。

指定文本大小的參數
指定文本大小的參數
指定字體族和字樣的參數

3.3.4 圖形尺寸與邊界尺寸

圖形尺寸和邊界尺寸大小的參數
  • 通過圖形參數控制圖形外觀
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)
# 2英寸寬,3英寸高
par(pin=c(2, 3))
# 線條寬度為默認的2倍,符號為默認的1.5倍
par(lwd=2, cex=1.5)
# 坐標軸刻度文本被設置為斜體,縮小為原來的75%
par(cex.axis=.75, font.axis=3)
# 使用紅色的實心圓圈和虛線創建第一幅圖
plot(dose, drugA, type="b", pch=19, lty=2, col="red")
# 使用綠色填充的綠色菱形加藍色虛線創建了第二幅圖
plot(dose, drugB, type="b", pch=23, lty=6, col="blue", bg="green")
# 恢復初始的圖形參數設置
par(opar)   
DrugA反應
DrugB反應

par() 的參數設定對兩幅圖都有效,而在plot()函數中指定的函數只對當前的圖有效。

3.4 添加文本、自定義坐標軸和圖例

可以添加標題main、副標題sub、坐標軸標簽(xlab、ylab)并指定了坐標軸范圍(xlim、ylim)。當然并不是所有的函數都支持這些選項。

plot(dose, drugA, type="b",  
     col="red", lty=2, pch=2, lwd=2,
     main="Clinical Trials for Drug A", 
     sub="This is hypothetical data", 
     xlab="Dosage", ylab="Drug Response",
     xlim=c(0, 60), ylim=c(0, 70))
文本添加

3.4.1 標題

title()函數可以為圖形添加標題和坐標軸標簽,當然也是可以指定其他圖形參數。調用形式:
title(main="", sub="", xlab="", ylab="", col.main="")

3.4.2 坐標軸

可以使用axis()函數來創建自定義的坐標軸,但是你要禁止使用繪圖函數自動生成的坐標軸,axes=FALSE禁用全部坐標軸,坐標軸創建的選項:

坐標抽創建選項

自定義坐標軸的例子:

x <- c(1:10)
y <- x
z <- 10/x
# 保存當前的所有參數
opar <- par(no.readonly=TRUE)
# 設置邊界大小
par(mar=c(5, 4, 4, 8) + 0.1)
# 繪圖,符號是21,線是紅色,
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)
# 在左邊建立y軸,坐標軸刻度為x向量,顏色紅色,垂直于坐標抽
axis(2, at=x, labels=x, col.axis="red", las=2)
# 在右邊建立坐標軸,刻度為z向量保留兩位小數,藍色,垂直,刻度文字為70%,刻度線向外0.01
axis(4, at=z, labels=round(z, digits=2),
     col.axis="blue", las=2, cex.axis=0.7, tck=-.01)
# 為坐標軸添加文本,右邊,添加y=1/x,垂直于坐標,藍色,正常大小
mtext("y=1/x", side=4, line=3, cex.lab=1, las=2, col="blue")
# 添加坐標軸標簽
title("An Example of Creative Axes",
      xlab="X values",
      ylab="Y=X")
par(opar)
自定義坐標軸

3.4.3 參考線

abline()可以用來添加參考線,格式:abline(h=yvalues, v=xvalues),里面也是可以指定其他圖形參數。

3.4.4 圖例

當圖形中包含的數據不止一組時,圖例可以判斷。legend()來添加圖例:legend(location, title, legend, ...)
兩種藥物響應情況:

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)
比較完整的圖表,但就是圖例的大小沒法控制好

3.4.5 文本標注

通過函數text()mtext()將文本添加到圖形上。前者可向繪圖區域內部添加文本,而后者向圖形的四個邊界之一添加文本。

兩個函數的選項

示例:

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)
添加文本

3.4.6 數學標注

函數plotmath()可以為圖形主體或邊界上的標題、坐標軸名稱或文本標注添加數學符號。

3.5 圖形組合

在R中使用函數par()layout()可以組合多幅圖形為一幅總括圖形。圖形參數mfrow=c(nrows, ncols)按行填充和mfcol=c(nrows, ncol)按列填充。示例:

attach(mtcars)
opar <- par(no.readonly=TRUE)
# 按行填充,2x2矩陣
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)
2x2組合圖

PS:這一部分內容確實比較多,整個下來比較累,進度比較慢,圖形的參數確實比較多,要多練習,多用才可以。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,443評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,530評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,407評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,981評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,759評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,204評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,263評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,415評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,955評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,650評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,892評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,675評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,967評論 2 374

推薦閱讀更多精彩內容

  • 3.1 使用圖形 使用代碼保存圖形:保存為PDF—pdf(filename),其它格式:win.metafile(...
    壹亮3278閱讀 2,561評論 0 53
  • Matplotlib 入門教程 來源:Introduction to Matplotlib and basic l...
    布客飛龍閱讀 31,844評論 5 162
  • 使用圖形 R是一個驚艷的圖形構建平臺。這里我特意使用了“構建”一詞。在通常的交互式會話中,你可以通過逐條輸入語句構...
    defineaset閱讀 105評論 0 0
  • 3.1使用圖形 R是一個驚艷的圖形構建平臺。這里我特意使用了構建一詞。在通常的交互式會話中,你可以通過逐條輸入語句...
    白馬少年說閱讀 2,979評論 4 6
  • 每個男生大概都有那么一段故事,要么柔情萬種,要么熱血江湖,要么撕心裂肺,要么忍辱負重。 只不過說實話,很少有人會講...
    府羅將相閱讀 99評論 0 0