《ggplot2:數(shù)據(jù)分析與圖形藝術(shù)》筆記2:從qplot開始入門

1.什么是qplot

qplot的意思是quick plot(快速作圖)瘩例,利用qplot我們可以非常方便地繪制各種圖形邀杏。有時在其他作圖系統(tǒng)中需要好幾行代碼才能搞定的事情驰徊,在qplot()中只需要一行代碼就可以搞定。

通過?qplot()命令查看qplot()的幫助文檔:
使用方法:
qplot(x, y = NULL, ..., data, facets = NULL, margins = FALSE,
geom = "auto", xlim = c(NA, NA), ylim = c(NA, NA), log = "",
main = NULL, xlab = deparse(substitute(x)),
ylab = deparse(substitute(y)), asp = NA, stat = NULL, position = NULL)

參數(shù):
x, y :定義x軸和y軸
data:制定作圖的數(shù)據(jù)集
facets:分面
margins:
xlim惦银,ylim:設(shè)置x軸和y軸的顯示區(qū)間咆课,如xlim=c(0,20),ylim=c(-0.9扯俱,-0.5)
geom:定義幾何對象
log:指定哪一個坐標(biāo)軸應(yīng)該取對數(shù)书蚪,log="x"表明x軸取對數(shù),log="xy"說明xy同時取對數(shù)
main:圖形的主標(biāo)題迅栅,放置在圖形頂端中部殊校,以大號字體顯示。如main="plot tittle"
xlab,ylab:設(shè)置x軸和y軸的標(biāo)簽文字

2.數(shù)據(jù)集準(zhǔn)備

使用ggplot2中自帶的一個叫做diamonds的數(shù)據(jù)集读存,里面包含了月5400顆鉆石的價格和質(zhì)量信息为流。示例如下:


01.jpg

為了方便示例窜醉,隨機截取diamonds中的100個樣本:

set.seed(1410) #使每次產(chǎn)生的隨機數(shù)相同
dsmall <- diamonds[sample(nrow(diamonds), 100),]

3.一個簡單的例子:繪制一張散點圖

在Rstudio中輸入下面的代碼,畫一張以carat為x軸price為y軸的散點圖:

qplot(carat, price, data = diamonds)
02.jpg

qplot支持將變量的函數(shù)作為參數(shù)艺谆,下面畫一張log(carat)對log(price)的圖:

qplot(log(carat), log(price), data = diamonds)
03.jpg

畫一張重量對體積(近似以xyz表示)的圖:

qplot(carat, x*y*z, data = diamonds)
04.jpg

4.圖形屬性

在qplot中可以設(shè)置圖形屬性榨惰,以更形象地展示圖形中的信息,常用的圖形屬性包括形狀(shape)静汤、顏色(colour)琅催、大小(size)、透明度(alpha)等虫给。

qplot(carat, price, data = dsmall) #不設(shè)置圖形屬性
qplot(carat, price, data = dsmall, colour = color) #設(shè)置color的顏色屬性
qplot(carat, price, data = dsmall, shape = cut) #設(shè)置cut的形狀屬性
qplot(carat, price, data = dsmall, colour = color,shape = cut) #設(shè)置color的顏色屬性,同時設(shè)置設(shè)置cut的形狀屬性

不設(shè)置圖形屬性:

05.jpg

設(shè)置color的顏色屬性:

06.jpg

設(shè)置cut的形狀屬性:

07.jpg

設(shè)置color的顏色屬性,同時設(shè)置設(shè)置cut的形狀屬性:

08.jpg

圖形屬性的手動設(shè)置

在上面的例子中藤抡,圖形屬性都是采用ggplot2的默認(rèn)值,其實抹估,我們可以通過I()自己設(shè)定圖形屬性缠黍。

qplot(carat, price, data = dsmall, colour = I("red"))#手動設(shè)置圖形的顏色屬性
09.jpg
#手動設(shè)置圖形的透明度屬性,分母越小,透明度越大药蜻,通過設(shè)置透明度可以查看數(shù)據(jù)密集的區(qū)域
qplot(carat, price, data = diamonds, alpha = I(1/10))
qplot(carat, price, data = diamonds, alpha = I(1/100))
qplot(carat, price, data = diamonds, alpha = I(1/200))

設(shè)置alpha為1/10:

10.jpg

設(shè)置alpha為1/100:
11.jpg

設(shè)置alpha為1/200:

12.jpg

5.幾何對象

在ggplot2中瓷式,幾何對象描述了應(yīng)該用何種對象對數(shù)據(jù)進行展示,其中一些幾何對象還關(guān)聯(lián)了相應(yīng)的統(tǒng)計變換语泽。通過改變幾何對象贸典,我們幾乎可以畫出任何形式的圖。

下面展示一些常用的幾何對象:

展示二維的變量關(guān)系:

  • geom = "point":用于繪制散點圖踱卵,當(dāng)我們指定x軸和y軸后廊驼,ggplot2默認(rèn)繪制散點圖
  • geom = "smooth":你和一條平滑曲線,并將曲線和標(biāo)準(zhǔn)誤展示在圖中
  • geom = "boxplot":繪制箱線圖惋砂,用于展示一系列點的分布情況
  • geom = "jitter":繪制擾動圖妒挎,用于展示一系列點的分布情況
  • geom = "path"和geom = "line":在數(shù)據(jù)的點之間繪制連線,線條圖(line)只能從創(chuàng)建從左到右的連線西饵,而路徑圖(path)根據(jù)點在統(tǒng)計表格中的順序進行連線酝掩。

展示一維的變量關(guān)系:
對于一維分布,幾何對象的選擇是根據(jù)變量的類型而指定的罗标。

  • 對于連續(xù)變量:geom = "histogram"繪制直方圖庸队,geom = "freqpoly"繪制頻率多邊形积蜻,geom = "density"繪制密度曲線闯割。如果不指定幾何對象,ggplot默認(rèn)繪制直方圖竿拆。
  • 對于離散變量:geom = "bar"繪制條形圖宙拉。

向點圖中添加平滑曲線

用途:如果散點圖中有非常多的數(shù)據(jù)點,在展示數(shù)據(jù)時丙笋,數(shù)據(jù)的變化趨勢可能并不明顯谢澈,這時我們可以在圖中添加一條平滑曲線煌贴,用來更清楚地展示數(shù)據(jù)的變化趨勢。

#添加平滑曲線
qplot(carat, price, data = diamonds, geom = c("point","smooth"))
qplot(carat, price, data = dsmall, geom = c("point","smooth"))
qplot(carat, price, data = dsmall, geom = c("point","smooth"),se = FALSE) #不使用標(biāo)準(zhǔn)誤

作圖效果依次如下:
繪制diamonds的平滑曲線:


13.jpg

繪制dsmall的平滑曲線:


14.jpg

繪制dsmall的平滑曲線锥忿,并去掉標(biāo)準(zhǔn)差:


15.jpg

不同平滑器的選擇:
在擬合平滑曲線時牛郑,可以通過method來選擇不同的平滑器。

  • 當(dāng)數(shù)據(jù)量較小時(<1000)敬鬓,默認(rèn)method = "loess"淹朋,使用局部回歸的方法繪制平滑曲線《ご穑可通過span參數(shù)控制平滑度础芍,取值范圍從0(很不平滑)到1(很平滑)。
  • 當(dāng)數(shù)據(jù)量大于1000時数尿,默認(rèn)使用method = "gam"擬合平滑線仑性。

箱線圖和擾動圖

用途:如果一個數(shù)據(jù)集中包含了一個分類變量和一個或多個連續(xù)變量,可以通過箱線圖和擾動圖顯示連續(xù)變量是如何隨著分類變量水平的變化而變化的右蹦。

#使用箱線圖和擾動圖顯示鉆石的價格如何隨著顏色的變化而變化
qplot(color, price/carat, data = diamonds, geom = "boxplot") #箱線圖
qplot(color, price/carat, data = diamonds, geom = "jitter") #擾動圖

箱線圖:


16.jpg

擾動圖:


17.jpg

通過改變擾動圖的透明度诊杆,展示數(shù)據(jù)點集中的部分:

qplot(color, price/carat, data = diamonds, geom = "jitter", alpha = I(1/5)) #擾動圖,透明度為1/5
qplot(color, price/carat, data = diamonds, geom = "jitter", alpha = I(1/50)) #擾動圖,透明度為1/50
qplot(color, price/carat, data = diamonds, geom = "jitter", alpha = I(1/200)) #擾動圖,透明度為1/200

透明度為1/5:


18.jpg

透明度為1/50:


19.jpg

透明度為1/200:


20.jpg

箱線圖和擾動圖的比較

  • 擾動圖可將所有的點繪制到圖中,重疊比較嚴(yán)重何陆,可通過調(diào)節(jié)透明度部分解決重疊問題刽辙。可調(diào)控size甲献、colour宰缤、shape等圖形屬性。
  • 箱線圖使用數(shù)據(jù)的五個統(tǒng)計量(最小值晃洒,第一四分位數(shù)慨灭、中位數(shù)、第三四分位數(shù)和最大值)對對數(shù)據(jù)進行概括球及,可參考的統(tǒng)計值更多氧骤。可用colour控制外框線的顏色吃引,用fill設(shè)置填充顏色筹陵,用size調(diào)節(jié)線的粗細(xì)。

直方圖和密度圖

用途:直方圖和密度曲線圖可以展示單個變量的分布镊尺,相對于箱線圖而言朦佩,它們提供了更多的關(guān)于單個分布的信息,但不容易在不同組之間進行比較庐氮。

qplot(carat, data = diamonds, geom = "histogram") #直方圖
qplot(carat, data = diamonds, geom = "density")  #密度曲線圖

直方圖:


21.jpg

密度曲線圖:


22.jpg

平滑度的調(diào)整:

  • 直方圖:通過binwidth調(diào)節(jié)組距语稠,來調(diào)節(jié)平滑度。
  • 密度曲線圖:使用adjust參數(shù)控制曲線的平滑度,adjust取值越大仙畦,曲線越平滑输涕。
#直方圖,binwidth=1
qplot(carat, data = diamonds, geom = "histogram", binwidth = 1) 
#直方圖,binwidth=0.1
qplot(carat, data = diamonds, geom = "histogram", binwidth = 0.1) 
#直方圖,binwidth=0.01
qplot(carat, data = diamonds, geom = "histogram", binwidth = 0.01) 

直方圖,binwidth=1


23.jpg

直方圖,binwidth=0.1


24.jpg

直方圖,binwidth=0.01


25.jpg
#密度曲線圖, adjust = 1
qplot(carat, data = diamonds, geom = "density", adjust = 1)  
#密度曲線圖, adjust = 0.1
qplot(carat, data = diamonds, geom = "density", adjust = 0.1)  
#密度曲線圖, adjust = 0.01
qplot(carat, data = diamonds, geom = "density", adjust = 0.01) 

密度曲線圖, adjust = 1:


26.jpg

密度曲線圖, adjust = 0.1:


27.jpg

密度曲線圖, adjust = 0.01:


28.jpg

要在不同組之間進行分布對比,只需要再添加一個圖形映射即可:

#直方圖,binwidth=1,通過填充顏色比較鉆石顏色分組
qplot(carat, data = diamonds, geom = "histogram", binwidth = 1, fill = color) 
#密度曲線圖, adjust = 1,通過線條顏色比較鉆石顏色分組
qplot(carat, data = diamonds, geom = "density", adjust = 1, colour = color) 

直方圖,binwidth=1,通過填充顏色比較鉆石顏色分組:


29.jpg

密度曲線圖, adjust = 1,通過線條顏色比較鉆石顏色分組:


30.jpg

條形圖

用途:使用條形圖統(tǒng)計并展示每一個水平下的觀測數(shù)量慨畸。在離散型變量的情況下莱坎,條形圖和直方圖呈現(xiàn)的結(jié)果相似。

#繪制鉆石顏色的條形圖
qplot(color, data = diamonds, geom = "bar")
31.jpg

時間序列中的線條圖和路徑圖

用途:線條圖和路徑圖通常用于可視化時間序列數(shù)據(jù)寸士。線條圖將點從左向右依次連接型奥,而路徑圖按照點在數(shù)據(jù)集中出現(xiàn)的順序進行連接。

下面使用ggplot2中自帶的economics數(shù)據(jù)集進行演示碉京,它包含了美國40年的經(jīng)濟數(shù)據(jù)厢汹。

#繪制失業(yè)率(unemploy/pop)和時間變化關(guān)系的線條圖
qplot(date, unemploy/pop, data = economics, geom = "line")
32.jpg
#繪制失業(yè)率(unemploy/pop)和失業(yè)星期中位數(shù)(uempmed)變化關(guān)系的路徑圖
qplot(uempmed, unemploy/pop, data = economics, geom = "path")
#繪制失業(yè)率(unemploy/pop)和失業(yè)星期中位數(shù)(uempmed)變化關(guān)系的路徑圖,加上點
qplot(uempmed, unemploy/pop, data = economics, geom = c("point", "path"))
#繪制失業(yè)率(unemploy/pop)和失業(yè)星期中位數(shù)(uempmed)變化關(guān)系的路徑圖谐宙,加上點烫葬,年份映射上顏色
qplot(uempmed, unemploy/pop, data = economics, geom = c("point", "path"), colour = date)

繪制失業(yè)率(unemploy/pop)和失業(yè)星期中位數(shù)(uempmed)變化關(guān)系的路徑圖:


33.jpg

繪制失業(yè)率(unemploy/pop)和失業(yè)星期中位數(shù)(uempmed)變化關(guān)系的路徑圖,加上點:


34.jpg

繪制失業(yè)率(unemploy/pop)和失業(yè)星期中位數(shù)(uempmed)變化關(guān)系的路徑圖凡蜻,加上點搭综,年份映射上顏色:


35.jpg

分面

在前面的例子中,我們已經(jīng)介紹過划栓,可以使用圖形屬性(顏色和形狀)來比較不同的分組兑巾,可以將所有的組繪制在一張圖中。此外忠荞,分面也可以實現(xiàn)相同的功能蒋歌,它將數(shù)據(jù)分隔成若干子集,然后創(chuàng)建一個圖形的矩陣委煤,將每一個子集繪制到圖形矩陣的窗格中堂油;所有子圖采用相同的圖形類型,并進行了一定的設(shè)計碧绞,使得他們之間可以進行方便的比較府框。

#以carat為x軸,并以color創(chuàng)建分面,將頻數(shù)映射的y軸
qplot(carat, data = diamonds, facets = color ~.,
      geom = "histogram", binwidth = 0.1, xlim = c(0,3))
#以carat為x軸讥邻,并以color創(chuàng)建分面,將密度映射的y軸
qplot(carat, ..density.., data = diamonds, facets = color ~.,
      geom = "histogram", binwidth = 0.1, xlim = c(0,3))

以carat為x軸迫靖,并以color創(chuàng)建分面,將頻數(shù)映射的y軸:


Rplot01.png

以carat為x軸,并以color創(chuàng)建分面,將密度映射的y軸:

Rplot3.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末兴使,一起剝皮案震驚了整個濱河市系宜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鲫惶,老刑警劉巖蜈首,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件实抡,死亡現(xiàn)場離奇詭異欠母,居然都是意外死亡欢策,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門赏淌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來踩寇,“玉大人,你說我怎么就攤上這事六水“乘铮” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵掷贾,是天一觀的道長睛榄。 經(jīng)常有香客問我固棚,道長熙参,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任忠怖,我火速辦了婚禮港准,結(jié)果婚禮上旨剥,老公的妹妹穿的比我還像新娘。我一直安慰自己浅缸,他們只是感情好轨帜,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著衩椒,像睡著了一般蚌父。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上毛萌,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天梢什,我揣著相機與錄音,去河邊找鬼朝聋。 笑死嗡午,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冀痕。 我是一名探鬼主播荔睹,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼言蛇!你這毒婦竟也來了僻他?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤腊尚,失蹤者是張志新(化名)和其女友劉穎吨拗,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡劝篷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年哨鸭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娇妓。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡像鸡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哈恰,到底是詐尸還是另有隱情只估,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布着绷,位于F島的核電站蛔钙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏荠医。R本人自食惡果不足惜夸楣,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望子漩。 院中可真熱鬧豫喧,春花似錦、人聲如沸幢泼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缕棵。三九已至孵班,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間招驴,已是汗流浹背篙程。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留别厘,地道東北人虱饿。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像触趴,于是被迫代替她去往敵國和親氮发。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359

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