《ggplot2: 數(shù)據(jù)分析與圖形藝術(shù)》學(xué)習(xí)筆記1


title: "《ggplot2: 數(shù)據(jù)分析與圖形藝術(shù)》學(xué)習(xí)筆記1"
author: "wintryheart"
date: "2019年5月10日"
output:
html_document:
toc: TRUE
toc_float: TRUE


knitr::opts_chunk$set(echo = TRUE, warning = FALSE)

1趣效、圖形語(yǔ)法

一張統(tǒng)計(jì)圖形是從數(shù)據(jù)幾何對(duì)象的圖形屬性的一個(gè)映射睁枕。此外雀摘,圖形中還可能包含數(shù)據(jù)的統(tǒng)計(jì)變換始衅,最后繪制在某個(gè)特定的坐標(biāo)系中摊唇,而分面則可以用來(lái)生成數(shù)據(jù)不同子集的圖形努潘。
一張統(tǒng)計(jì)圖形就是由上述這些獨(dú)立的圖形部件所組成的扛禽。

  • 最基礎(chǔ)的部分是你想要可視化的數(shù)據(jù)(data)以及一系列將數(shù)據(jù)中的變量對(duì)應(yīng)到圖形屬性的映射(mapping)懂牧;
  • 幾何對(duì)象(geom):在圖中實(shí)際看到的圖形元素侈净,如點(diǎn)、線僧凤、多邊形等畜侦;
  • 統(tǒng)計(jì)變換(stats):對(duì)數(shù)據(jù)進(jìn)行的某種匯總,如分組計(jì)數(shù)躯保、線性回歸等旋膳。可選途事,但很有用验懊。
  • 標(biāo)度(scale):將數(shù)據(jù)的取值映射到圖形空間,如用顏色尸变、大小或形狀來(lái)表示不同的取值义图,使讀者可以從圖形中讀取原始數(shù)據(jù)。展現(xiàn)方式為繪制圖例坐標(biāo)軸召烂。
  • 坐標(biāo)系(coord):描述數(shù)據(jù)是如何映射到圖形所在的平面碱工,同時(shí)提供看圖所需的坐標(biāo)軸和網(wǎng)絡(luò)線。通常使用笛卡爾坐標(biāo)系奏夫,但也可以變換為其他類型怕篷,如極坐標(biāo)和地圖投影。
  • 分面(facet):描述如何將數(shù)據(jù)分解為各個(gè)子集酗昼,以及如何對(duì)子集作圖并聯(lián)合進(jìn)行展示廊谓。分面也稱為條件作圖或網(wǎng)格作圖。

2麻削、qplot(quick plot)快速作圖

主要學(xué)習(xí):

  • qplot()的基本用法
  • 數(shù)據(jù)和映射
  • 圖形屬性(如顏色蹂析、大小和形狀)
  • 幾何對(duì)象(如點(diǎn)、線碟婆、條形等))
  • 分面(條件作圖)
  • 外觀

2.2 數(shù)據(jù)集

ggplot2包中的diamonds數(shù)據(jù)集包含約54000顆鉆石的信息电抚,數(shù)據(jù)涵蓋:

  • 鉆石質(zhì)量的四個(gè)C:

    • 克拉重量(carat)
    • 切工(cut)
    • 顏色(color)
    • 凈度(clarity)
  • 五個(gè)物理指標(biāo)

    • 深度(depth)
    • 鉆面寬度(table)
    • 其他測(cè)量尺度(x, y, z)
library(gridExtra)  #支持ggplot2多圖并列
library(ggplot2)
data("diamonds")
head(diamonds)

這個(gè)數(shù)據(jù)集太大,我們?nèi)?00個(gè)隨機(jī)樣本來(lái)作圖展示竖共。

set.seed(1410) ##讓樣本可重復(fù)
dsmall <- diamonds[sample(nrow(diamonds),100),]
第一張圖
attach(diamonds)
p1 <- qplot(carat, price)  #價(jià)格和重量之間的關(guān)系
p2 <- qplot(log(carat), log(price))  #變量變換
p3 <- qplot(carat,x*y*z)  #變量組合,體積和重量之間關(guān)系
grid.arrange(p1,p2,p3, ncol=3)
detach(diamonds)
qplot-1.png

2.4 圖形屬性

attach(dsmall)
p4 <- qplot(carat, price, color=color) #將color變量映射到點(diǎn)的顏色
p5 <- qplot(carat, price, shape=cut)  # 將cut變量映射到點(diǎn)的形狀
grid.arrange(p4,p5,ncol=2)
detach(dsmall)
mapping-1.png

不同類型的變量適合不同的圖形屬性:

  • 顏色和形狀適合于分類變量蝙叛;
  • 大小適合于連續(xù)變量;
  • 數(shù)據(jù)量很大公给,不同組的數(shù)據(jù)之間很難區(qū)分借帘,適合于分面蜘渣。

2.5 幾何對(duì)象

適用于考察二維變量關(guān)系的幾何對(duì)象:

  • geom="point",繪制散點(diǎn)圖肺然。
  • geom="smooth"蔫缸,擬合一條平滑曲線,并將曲線和標(biāo)準(zhǔn)誤展示在圖中际起。
  • geom="boxplot"拾碌,繪制箱形胡須圖,用以概括一系列點(diǎn)的分布情況街望。
  • geom="path"和geom="line"可以在數(shù)據(jù)點(diǎn)之間繪制連線校翔。
    • 路徑圖可以是任意的方向;
    • 線條圖只能創(chuàng)建從左到右的連線灾前。

適用于考察一維變量分布的幾何對(duì)象:

對(duì)于連續(xù)變量:

  • geom="histogram"防症, 繪制直方圖;
  • geom="freqpoly"哎甲,繪制頻率多邊形蔫敲;
  • geom="density",繪制密度曲線炭玫。
  • qplot()默認(rèn)直方圖奈嘿。

對(duì)于離散變量:

  • geom="bar",繪制條形圖础嫡。

2.5.1 平滑曲線

添加平滑曲線指么,展示數(shù)據(jù)趨勢(shì)酝惧。

p5 <- qplot(carat, price, data=dsmall, geom=c("point","smooth")) 
#利用c()函數(shù)將多個(gè)幾何對(duì)象組成一個(gè)向量傳遞給geom榴鼎。幾何對(duì)象會(huì)按指定的順序進(jìn)行堆疊。  
#如果不想繪制標(biāo)準(zhǔn)誤晚唇,可以使用se=FALSE巫财。
p6 <- qplot(carat, price, data=dsmall, geom=c("point", "smooth"), se=FALSE)
grid.arrange(p5, p6, ncol=2)
smooth-1.png

利用method參數(shù)可以選擇許多不同的平滑器:

  • method="loess",當(dāng)n<1000時(shí)是默認(rèn)選項(xiàng)哩陕,使用的是局部回歸的方法平项。曲線的平滑程度由span參數(shù)控制,取值范圍為0(很不平滑)至1(很平滑)悍及。
qplot(carat, price, data=dsmall, geom=c("point","smooth"), span=0.2)
loess-1.png
  • method="gam", formula=y ~ s(x)闽瓢,調(diào)用mgcv包擬合一個(gè)廣義可加模型。這個(gè)模型與lm中的樣條模型類似心赶,但樣條的階數(shù)是通過(guò)數(shù)據(jù)得到的扣讼。如果n>1000,使用公式 formula = y ~ s(x, bs="cs")缨叫。
library(mgcv)
p7 <- qplot(carat, price, data=dsmall, geom=c("point","smooth"), method="gam", formula=y~s(x))
p8 <- qplot(carat, price, data=diamonds, geom=c("point","smooth"), method="gam", formula=y~s(x, bs="cs"))
grid.arrange(p7, p8, ncol=2)
mgcv-1.png
  • method="lm"椭符,默認(rèn)擬合一條直接荔燎。通過(guò)指定formula = y ~ poly(x,2)可以擬合二次多項(xiàng)式。通過(guò)加載splines包可以使用樣條模型:formula = y ~ ns(x,2)销钝。第二個(gè)參數(shù)是自由度:自由度越大有咨,曲線波動(dòng)越大。
p9 <- qplot(carat, price, data=dsmall, geom=c("point","smooth"), method="lm")
library(splines)
p10 <- qplot(carat, price, data=dsmall, geom=c("point","smooth"), method="lm", formula=y~ns(x,5))
grid.arrange(p9,p10, ncol=2)
splines-1.png
  • method="rlm"蒸健,與“l(fā)m”類似座享,但調(diào)用MASS包,擬合穩(wěn)健回歸直線纵装。

2.5.2 箱線圖和擾動(dòng)點(diǎn)圖

p11 <- qplot(color, price/carat, data=diamonds, geom="jitter")  #擾動(dòng)點(diǎn)圖
p12 <- qplot(color, price/carat, data=diamonds, geom="boxplot")  #箱線胡須圖
grid.arrange(p11,p12,ncol=2)
jitter-1.png

對(duì)于擾動(dòng)點(diǎn)圖征讲,可以如一般散點(diǎn)圖控制其他圖形屬性,如size, colour和shape橡娄。
對(duì)于箱線圖诗箍,可以用color控制框線顏色,fill設(shè)置填充顏色挽唉,size調(diào)節(jié)線的粗細(xì)滤祖。

2.5.3 直方圖和密度曲線圖

p13 <- qplot(carat, data=diamonds, geom="histogram")  #直方圖
p14 <- qplot(carat, data=diamonds, geom="density")  #密度曲線圖
grid.arrange(p13, p14, ncol=2)
histogram-1.png

對(duì)于密度曲線,adjust參數(shù)控制曲線的平滑程度瓶籽,取值越大匠童,曲線越平滑。
對(duì)于直方圖塑顺, binwidth參數(shù)汤求,通過(guò)設(shè)定組距來(lái)調(diào)節(jié)平滑度。 組距越小严拒,越體現(xiàn)細(xì)節(jié)扬绪。

對(duì)于分組分布比較,只需要再加上一個(gè)圖形映射裤唠。

p15 <- qplot(carat, data=diamonds, geom="density", color=color)
p16 <- qplot(carat, data=diamonds, geom="histogram", fill=color)
#等式后面的color是數(shù)據(jù)集中的變量color鉆石顏色挤牛,按color分組。
grid.arrange(p15,p16,ncol=2)
group-1.png

2.5.4 條形圖

在離散變量的情形下种蘸,條形圖與直方圖類似墓赴。
如果數(shù)據(jù)已經(jīng)匯總,或者想用其他的方式對(duì)數(shù)據(jù)進(jìn)行分組處理(如航瞭,對(duì)連續(xù)變量進(jìn)行分組求和)诫硕,可以使用weight幾何對(duì)象。

p17 <- qplot(color, data=diamonds, geom="bar")  #普通條形圖
p18 <- qplot(color, data=diamonds, geom="bar", weight=carat) +
  scale_y_continuous("carat")  #按重量加權(quán)的條形圖刊侯,展示每種顏色的鉆石的總重量
grid.arrange(p17,p18,ncol=2)
bar-1.png

2.5.5 時(shí)間序列中的線條圖和路徑圖

線條圖將點(diǎn)從左到右進(jìn)行連接(等價(jià)于將數(shù)據(jù)按X取值進(jìn)行排序章办,然后繪制路徑圖);x軸一般是時(shí)間,展示單變量隨時(shí)間變化的情況纲菌。
路徑圖按照點(diǎn)在數(shù)據(jù)集中的順序?qū)ζ溥M(jìn)行連接挠日。展示兩個(gè)變量隨時(shí)間聯(lián)動(dòng)的情況,時(shí)間反映在點(diǎn)的順序上翰舌。

p19 <- qplot(date, unemploy/pop, data=economics, geom="line")  #失業(yè)率變化  
p20 <- qplot(date, uempmed, data=economics, geom="line")  #失業(yè)星期數(shù)的中位數(shù)變化
grid.arrange(p19,p20, ncol=2)
serial-1.png

我們可以用一張散點(diǎn)圖表示失業(yè)率和失業(yè)時(shí)間長(zhǎng)度之間的關(guān)系嚣潜,但是我們不能看出變量關(guān)系隨時(shí)間的變化。解決辦法是將臨近時(shí)間點(diǎn)的散點(diǎn)連接起來(lái)椅贱,形成一張路徑圖懂算。
由于線條有很多交叉,我們可以將年份映射到color屬性上庇麦,方便看出時(shí)間的行進(jìn)方向计技。

year <- function(x) as.POSIXlt(x)$year +1900  #year函數(shù)提取年份
qplot(unemploy/pop, uempmed, data=economics, geom="path", color=year(date))
#可以看出雖然失業(yè)率失業(yè)時(shí)間長(zhǎng)度一直高度相關(guān),但最近幾年山橄,失業(yè)時(shí)間長(zhǎng)度與失業(yè)率相比有增長(zhǎng)的趨勢(shì)垮媒。
path-1.png

2.6 分面

分面將數(shù)據(jù)分割成若干子集,然后創(chuàng)建一個(gè)圖形矩陣航棱,將每一個(gè)子集繪制到圖形矩陣的窗格中睡雇。所有的子圖采用相同的圖形類型,并進(jìn)行一定的設(shè)計(jì)饮醇,使得它們之間方便比較它抱。

qplot()通過(guò)row_var ~ col_var表達(dá)式進(jìn)行指定∑蛹瑁可以指定任意數(shù)量的行變量和列變量观蓄,但注意當(dāng)變量數(shù)超過(guò)兩個(gè)時(shí),生成的圖形可能非常多祠墅,以至于不適合在屏幕上顯示侮穿。

如果只想指定一行或一列,可以使用.作為占位符饵隙,例如row_var ~ . 創(chuàng)建一個(gè)單列多行的圖形矩陣撮珠。

p21 <- qplot(carat, data=diamonds, facets = color ~ ., geom = "histogram", binwidth=0.1, xlim = c(0,3))
p22 <- qplot(carat, ..density.., data=diamonds, facets = color ~ ., geom = "histogram", binwidth=0.1, xlim = c(0,3))  
# ..density..告訴ggplot2將密度而不是頻數(shù)映射到y(tǒng)軸沮脖。
grid.arrange(p21, p22, ncol=2)
#左圖展示的是頻數(shù)金矛,右圖展示的是頻率。在比較不同組分布時(shí)勺届,頻率圖不受該組樣本量大小的影響驶俊。圖形顯示,高質(zhì)量的鉆石(顏色D)在小尺寸分布上是偏斜的免姿,但隨著質(zhì)量下降饼酿,重量分布越來(lái)越平坦。
facet-1.png

2.7 其他選項(xiàng)

其他一些控制圖形的外觀的參數(shù):

  • xlim, ylim: 設(shè)置x軸和y軸的顯示區(qū)間。取值是一個(gè)長(zhǎng)度為2的向量故俐。例如xlime=c(0,20)想鹰;
  • log: 一個(gè)字符型向量,說(shuō)明哪個(gè)坐標(biāo)軸應(yīng)該取對(duì)數(shù)药版。例如:log="x"辑舷,表示對(duì)x軸取對(duì)數(shù);log="xy"槽片,表示對(duì)x軸和y軸都取對(duì)數(shù)何缓。
  • main:圖形的主標(biāo)題,可以是字符串还栓,也可以是一個(gè)表達(dá)式碌廓。例如main = expression(beta[1]==1)。更多數(shù)學(xué)表達(dá)式參見(jiàn)?plotmath命令剩盒。
  • xlab, ylab:設(shè)置x軸和y軸的標(biāo)簽文字谷婆。可以是字符串辽聊,也可以是表達(dá)式波材。
p23 <- qplot(carat, price, data=dsmall,
      xlab ="Weight(carats)" , ylab="Price($)",
      main="Price-weight relationship"
)

p24 <- qplot(carat, price/carat, data=dsmall,
      xlab = "Weight(carats)", ylab= expression(frac(price,carat)),
      main="Price-weight relationship",
      xlim=c(.2,1)
)
p25 <- qplot(carat, price, data=dsmall, log="xy")
grid.arrange(p23,p24,p25,ncol=3)
others-1.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市身隐,隨后出現(xiàn)的幾起案子廷区,更是在濱河造成了極大的恐慌,老刑警劉巖贾铝,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隙轻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡垢揩,警方通過(guò)查閱死者的電腦和手機(jī)玖绿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)叁巨,“玉大人斑匪,你說(shuō)我怎么就攤上這事》嫔祝” “怎么了蚀瘸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)庶橱。 經(jīng)常有香客問(wèn)我贮勃,道長(zhǎng),這世上最難降的妖魔是什么苏章? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任寂嘉,我火速辦了婚禮奏瞬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘泉孩。我一直安慰自己硼端,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布寓搬。 她就那樣靜靜地躺著显蝌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪订咸。 梳的紋絲不亂的頭發(fā)上曼尊,一...
    開(kāi)封第一講書(shū)人閱讀 51,718評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音脏嚷,去河邊找鬼骆撇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛父叙,可吹牛的內(nèi)容都是我干的神郊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼趾唱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼涌乳!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起甜癞,我...
    開(kāi)封第一講書(shū)人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤夕晓,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后悠咱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蒸辆,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年析既,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了躬贡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡眼坏,死狀恐怖拂玻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宰译,我是刑警寧澤檐蚜,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站囤屹,受9級(jí)特大地震影響熬甚,放射性物質(zhì)發(fā)生泄漏逢渔。R本人自食惡果不足惜肋坚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧智厌,春花似錦诲泌、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至诚卸,卻和暖如春葵第,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背合溺。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工卒密, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人棠赛。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓哮奇,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親睛约。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鼎俘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容