ggplot2筆記里面采用的是R里面內(nèi)置的數(shù)據(jù)集進(jìn)行畫圖的右核,數(shù)據(jù)的結(jié)構(gòu)比較簡單你,便于理解。筆記參考的圖書是《數(shù)據(jù)分析實(shí)戰(zhàn) 》by 【美】托馬茲·卓巴斯(Tomasz Drabas)驹愚,書可以從https://b-ok.global/上面直接下載译秦,下載不了的如果想要圖書可以留下郵箱峡捡。
第2章 快速探索數(shù)據(jù)
qplot() 函數(shù)
它的語法與基礎(chǔ)繪圖系統(tǒng)類似,對于每一個(gè)由qplot() 函數(shù)繪制的圖形筑悴,技巧中也提供了用更強(qiáng)大的ggplot() 函數(shù)來繪圖的等價(jià)解決方案们拙。
2.1 繪制散點(diǎn)圖
那么如何繪制散點(diǎn)圖?
使用plot() 函數(shù)可繪制散點(diǎn)圖阁吝,運(yùn)行命令時(shí)依次傳遞給plot() 函數(shù)一個(gè)向量x 和一個(gè)向量y
plot(mtcars$wt,mtcars$mpg)
對于ggplot2系統(tǒng)砚婆,可用qplot() 函數(shù)得到相同的繪圖結(jié)果
library(ggplot2)
qplot(mtcars$wt, mtcars$mpg)
如果繪圖所用的兩個(gè)參數(shù)向量包含在同一個(gè)數(shù)據(jù)框內(nèi),則可以運(yùn)行下面的命令
qplot(wt,mpg,data=mtcars)
這與下面等價(jià)
ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point()
2.2 繪制折線圖
如何繪制折線圖装盯?
使用plot() 函數(shù)繪制折線圖(見圖2-3左圖)時(shí)需向其傳遞一個(gè)包含x 值的向量和一個(gè)包含y 值的向量坷虑,并使用參數(shù)type="l"
plot(pressure$temperature, pressure$pressure, type="l")
如果要向圖形中添加數(shù)據(jù)點(diǎn)或者多條折線,則需先用plot() 函數(shù)繪制第一條折線埂奈,再通過points() 函數(shù)和lines() 函數(shù)分別添加數(shù)據(jù)點(diǎn)和更多折線
plot(pressure$temperature, pressure$pressure, type="l")
points(pressure$temperature,pressure$pressure)
lines(pressure$temperature, pressure$pressure/2, col="red")
points(pressure$temperature, pressure$pressure/2, col="red")
在ggplot2中竿刁,可以使用qplot() 函數(shù)并將參數(shù)設(shè)定為geom="line" 得到類似的繪圖結(jié)果
library(ggplot2)
qplot(pressure$temperature, pressure$pressure, geom="line")
如果函數(shù)的兩個(gè)參數(shù)向量已包含在同一個(gè)數(shù)據(jù)框中,則可以運(yùn)行下面的語句
qplot(temperature,pressure, data=pressure, geom="line")
?這等價(jià)于下面的命令
ggplot(pressure, aes(x=temperature, y=pressure)) + geom_line()
添加數(shù)據(jù)點(diǎn)
qplot(temperature, pressure, data=pressure, geom=c("line", "point"))
這等價(jià)于下面的命令
ggplot(pressure, aes(x=temperature, y=pressure)) + geom_line() + geom_point()
2.3 繪制條形圖
如何繪制條形圖贯涎?
對變量的值繪制條形圖钥组,可以使用barplot() 函數(shù),并向其傳遞兩個(gè)向量作為參數(shù)绑谣,第一個(gè)向量用來設(shè)定條形的高度党窜,第二個(gè)向量用來設(shè)定每個(gè)條形對應(yīng)的標(biāo)簽
如果向量中的元素已被命名,則系統(tǒng)會自動使用元素的名字作為條形標(biāo)簽
barplot(BOD$demand, names.arg=BOD$Time)
有時(shí)候借宵,“條形圖”表示的是分組數(shù)據(jù)中各個(gè)元素的頻數(shù)(這一點(diǎn)非常重要幌衣,柱子的高度表示的是頻數(shù))
這種條形圖跟直方圖有些類似,不過壤玫,其用離散取值的x 軸替代了直方圖中連續(xù)取值的x 軸豁护。要計(jì)算向量中各個(gè)類別的頻數(shù),可以使用table() 函數(shù)
table(mtcars$cyl)
首先在對數(shù)據(jù)進(jìn)行處理之前要對自己的數(shù)據(jù)有充分的認(rèn)識
只需將上面的表格結(jié)果傳遞給barplot() 函數(shù)即可繪制頻數(shù)條形圖
生成頻數(shù)表
barplot(table(mtcars$cyl))
qplot() 函數(shù)也可以用來繪制分組變量的頻數(shù)條形圖欲间,事實(shí)上楚里,這是ggplot2繪制條形圖的默認(rèn)方式,它比繪制變量值條形圖的命令更簡短猎贴。再提醒一次班缎,注意連續(xù)x 軸和離散x 軸的差異
cyl是連續(xù)變量
qplot(mtcars$cyl)
將cyl轉(zhuǎn)化為因子型變量
qplot(factor(mtcars$cyl))
如果參數(shù)向量包含在同一個(gè)數(shù)據(jù)框內(nèi),則可以運(yùn)行下面的語句
變量值條形圖她渴,這里用BOD數(shù)據(jù)框中的Time列
ggplot(BOD, aes(x=Time, y=demand)) + geom_bar(stat="identity")
頻數(shù)條形圖
qplot(factor(cyl), data=mtcars)
這與下面的語句等價(jià)
ggplot(mtcars, aes(x=factor(cyl))) + geom_bar()
2.4 繪制直方圖
如何繪制直方圖來查看一維數(shù)據(jù)的分布特征?
可以使用hist() 函數(shù)繪制直方圖趁耗,使用時(shí)需向其傳遞一個(gè)向量
hist(mtcars$mpg)
通過breaks參數(shù)指定大致組距,具體可以查看?hist的幫助文檔里面的介紹
hist(mtcars$mpg,breaks=10)
對于ggplot2包苛败,可以使用qplot() 函數(shù)得到同樣的繪圖結(jié)果
qplot(mtcars$mpg)
如果參數(shù)向量在同一個(gè)數(shù)據(jù)框內(nèi)满葛,則可以使用下面的語句
library(ggplot2)
qplot(mpg, data=mtcars, binwidth=4)
這等價(jià)于
ggplot(mtcars, aes(x=mpg)) + geom_histogram(binwidth=4)
2.5 繪制箱線圖
如何繪制箱線圖以對不同分布進(jìn)行比較?
使用plot() 函數(shù)繪制箱線圖時(shí)向其傳遞兩個(gè)向量:x 和y 罢屈。當(dāng)x 為因子型變量(與數(shù)值型變量對應(yīng))時(shí)嘀韧,它會默認(rèn)繪制箱線圖,可以class(ToothGrowth)查看一下ToothGrowth的數(shù)據(jù)類型。
plot(ToothGrowth$supp, ToothGrowth$len)
當(dāng)兩個(gè)參數(shù)向量包含在同一個(gè)數(shù)據(jù)框中時(shí),也可以使用公式語法。公式語法允許我們在x 軸上使用變量組合
公式語法
boxplot(len ~ supp, data = ToothGrowth)
在x軸上引入兩變量的交互
boxplot(len ~ supp + dose, data = ToothGrowth)
對于ggplot2包肃叶,qplot() 函數(shù)可以繪制同樣的圖形蹂随,使用時(shí)將參數(shù)設(shè)定為geom="boxplot"?
library(ggplot2)
qplot(ToothGrowth$supp, ToothGrowth$len, geom="boxplot")
當(dāng)兩個(gè)參數(shù)向量在同一個(gè)數(shù)據(jù)框內(nèi)時(shí),則可以使用下面的語句
qplot(supp, len, data=ToothGrowth, geom="boxplot")
這等價(jià)于
ggplot(ToothGrowth, aes(x=supp,y=len)) + geom_boxplot()
使用interaction() 函數(shù)將分組變量組合在一起也可以繪制基于多分組變量的箱線圖
dose 變量是數(shù)值型因惭,因此岳锁,我們必須先將其轉(zhuǎn)化為因子型變量,再將其作為分組變量
使用三個(gè)獨(dú)立的向量參數(shù)
qplot(interaction(ToothGrowth$supp, ToothGrowth$dose), ToothGrowth$len,geom="boxplot")
也可以以數(shù)據(jù)框中的列作為參數(shù)
qplot(interaction(supp, dose), len, data=ToothGrowth, geom="boxplot")
這等價(jià)于
ggplot(ToothGrowth, aes(x=interaction(supp, dose), y=len)) + geom_boxplot()
需要注意的是:基礎(chǔ)繪圖系統(tǒng)繪制的箱線圖與ggplot2略有不同蹦魔。這是因?yàn)閮烧咴诶L圖過程中調(diào)用的計(jì)算分位數(shù)的方法略有差異
運(yùn)行?geom_boxplot 和?boxplot.base 命令可以得到更多關(guān)于兩者差異的細(xì)節(jié)信息
?geom_boxplot
?boxplot.base
2.6 繪制函數(shù)圖像
如何繪制函數(shù)圖像激率?
可以使用curve() 函數(shù)繪制函數(shù)圖像。使用時(shí)需向其傳遞一個(gè)關(guān)于變量x 的表達(dá)式
curve(x^3 - 5*x, from=-4, to=4)
將參數(shù)設(shè)置為add=TRUE 可以向已有圖形添加函數(shù)圖像
也可以繪制自己定義的函數(shù)圖像
myfun <- function
(xvar) {
1/(1 + exp(-xvar + 10))
}
curve(myfun(x), from=0, to=20)
# 在原來函數(shù)的基礎(chǔ)上添加紅色的曲線
curve(1-myfun(x), add = TRUE, col ="red")
也可以使用ggplot()函數(shù)進(jìn)行繪制
library(ggplot2)
# 這等價(jià)于
ggplot(data.frame(x=c(0, 20)), aes(x=x)) + stat_function(fun=myfun, geom="line")