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ì)量信息为流。示例如下:
為了方便示例窜醉,隨機截取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)
qplot支持將變量的函數(shù)作為參數(shù)艺谆,下面畫一張log(carat)對log(price)的圖:
qplot(log(carat), log(price), data = diamonds)
畫一張重量對體積(近似以xyz表示)的圖:
qplot(carat, x*y*z, data = diamonds)
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è)置圖形屬性:
設(shè)置color的顏色屬性:
設(shè)置cut的形狀屬性:
設(shè)置color的顏色屬性,同時設(shè)置設(shè)置cut的形狀屬性:
圖形屬性的手動設(shè)置
在上面的例子中藤抡,圖形屬性都是采用ggplot2的默認(rèn)值,其實抹估,我們可以通過I()
自己設(shè)定圖形屬性缠黍。
qplot(carat, price, data = dsmall, colour = I("red"))#手動設(shè)置圖形的顏色屬性
#手動設(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:
設(shè)置alpha為1/100:
設(shè)置alpha為1/200:
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的平滑曲線:
繪制dsmall的平滑曲線:
繪制dsmall的平滑曲線锥忿,并去掉標(biāo)準(zhǔn)差:
不同平滑器的選擇:
在擬合平滑曲線時牛郑,可以通過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") #擾動圖
箱線圖:
擾動圖:
通過改變擾動圖的透明度诊杆,展示數(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:
透明度為1/50:
透明度為1/200:
箱線圖和擾動圖的比較
- 擾動圖可將所有的點繪制到圖中,重疊比較嚴(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") #密度曲線圖
直方圖:
密度曲線圖:
平滑度的調(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
直方圖,binwidth=0.1
直方圖,binwidth=0.01
#密度曲線圖, 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:
密度曲線圖, adjust = 0.1:
密度曲線圖, adjust = 0.01:
要在不同組之間進行分布對比,只需要再添加一個圖形映射即可:
#直方圖,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,通過填充顏色比較鉆石顏色分組:
密度曲線圖, adjust = 1,通過線條顏色比較鉆石顏色分組:
條形圖
用途:使用條形圖統(tǒng)計并展示每一個水平下的觀測數(shù)量慨畸。在離散型變量的情況下莱坎,條形圖和直方圖呈現(xiàn)的結(jié)果相似。
#繪制鉆石顏色的條形圖
qplot(color, data = diamonds, geom = "bar")
時間序列中的線條圖和路徑圖
用途:線條圖和路徑圖通常用于可視化時間序列數(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")
#繪制失業(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)系的路徑圖:
繪制失業(yè)率(unemploy/pop)和失業(yè)星期中位數(shù)(uempmed)變化關(guān)系的路徑圖,加上點:
繪制失業(yè)率(unemploy/pop)和失業(yè)星期中位數(shù)(uempmed)變化關(guān)系的路徑圖凡蜻,加上點搭综,年份映射上顏色:
分面
在前面的例子中,我們已經(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軸:
以carat為x軸,并以color創(chuàng)建分面,將密度映射的y軸: