ggplot2筆記——初步摸索

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)


R語言里面默認(rèn)的plot函數(shù)畫散點(diǎn)圖

對于ggplot2系統(tǒng)砚婆,可用qplot() 函數(shù)得到相同的繪圖結(jié)果

library(ggplot2)

qplot(mtcars$wt, mtcars$mpg)


ggplot2包里面的qplot函數(shù)畫散點(diǎn)圖

如果繪圖所用的兩個(gè)參數(shù)向量包含在同一個(gè)數(shù)據(jù)框內(nèi),則可以運(yùn)行下面的命令

qplot(wt,mpg,data=mtcars)


一個(gè)dataframe里面包含有多個(gè)向量時(shí)的情況突勇,注意坐標(biāo)軸標(biāo)簽的變化

這與下面等價(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")


plot函數(shù)畫出來的折線圖

如果要向圖形中添加數(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")


用plot函數(shù)繪制多條折線并且在折線上面添加數(shù)據(jù)點(diǎn)

在ggplot2中竿刁,可以使用qplot() 函數(shù)并將參數(shù)設(shè)定為geom="line" 得到類似的繪圖結(jié)果

library(ggplot2)

qplot(pressure$temperature, pressure$pressure, geom="line")


用ggplot2中的qplot函數(shù)繪制折線圖

如果函數(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()


用ggplot函數(shù)來繪制折線圖

添加數(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()


用geom_point()函數(shù)添加數(shù)據(jù)點(diǎn)



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)


R中內(nèi)置的BOD數(shù)據(jù)集


用barplot()函數(shù)畫出來的圖形(x軸表示的是離散的變量)

有時(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)識


R語言里面內(nèi)置的數(shù)據(jù)集mtcars

只需將上面的表格結(jié)果傳遞給barplot() 函數(shù)即可繪制頻數(shù)條形圖

生成頻數(shù)表

barplot(table(mtcars$cyl))


用barplot繪制mtcars$cyl的頻數(shù)表

qplot() 函數(shù)也可以用來繪制分組變量的頻數(shù)條形圖欲间,事實(shí)上楚里,這是ggplot2繪制條形圖的默認(rèn)方式,它比繪制變量值條形圖的命令更簡短猎贴。再提醒一次班缎,注意連續(xù)x 軸和離散x 軸的差異

cyl是連續(xù)變量

qplot(mtcars$cyl)


cyl是連續(xù)變量時(shí)畫出來的圖形

將cyl轉(zhuǎn)化為因子型變量

qplot(factor(mtcars$cyl))


cyl是因子變量時(shí)畫出來的圖形

如果參數(shù)向量包含在同一個(gè)數(shù)據(jù)框內(nèi),則可以運(yùn)行下面的語句

變量值條形圖她渴,這里用BOD數(shù)據(jù)框中的Time列

ggplot(BOD, aes(x=Time, y=demand)) + geom_bar(stat="identity")


采用ggplot函數(shù)畫出來的barplot

頻數(shù)條形圖

qplot(factor(cyl), data=mtcars)


qplot繪制的頻數(shù)條形圖达址,縱坐標(biāo)表示的是橫坐標(biāo)對應(yīng)的頻數(shù)

這與下面的語句等價(jià)

ggplot(mtcars, aes(x=factor(cyl))) + geom_bar()


2.4 繪制直方圖

如何繪制直方圖來查看一維數(shù)據(jù)的分布特征?

可以使用hist() 函數(shù)繪制直方圖趁耗,使用時(shí)需向其傳遞一個(gè)向量

hist(mtcars$mpg)


hist繪制的直方圖沉唠,縱坐標(biāo)表示的是橫坐標(biāo)的數(shù)值代表的頻率

通過breaks參數(shù)指定大致組距,具體可以查看?hist的幫助文檔里面的介紹

hist(mtcars$mpg,breaks=10)


設(shè)置了break之后的hist圖

對于ggplot2包苛败,可以使用qplot() 函數(shù)得到同樣的繪圖結(jié)果

qplot(mtcars$mpg)

如果參數(shù)向量在同一個(gè)數(shù)據(jù)框內(nèi)满葛,則可以使用下面的語句

library(ggplot2)

qplot(mpg, data=mtcars, binwidth=4)


qplot()函數(shù)繪制直方圖并設(shè)置binwidth

這等價(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)


ToothGrowth$supp是因子型儡遮,ToothGrowth$len是數(shù)值型乳蛾,ToothGrowth$dose是數(shù)值型


當(dāng)數(shù)據(jù)的類型是因子時(shí)plot()函數(shù)會直接繪制出來箱線圖

當(dāng)兩個(gè)參數(shù)向量包含在同一個(gè)數(shù)據(jù)框中時(shí),也可以使用公式語法。公式語法允許我們在x 軸上使用變量組合

公式語法

boxplot(len ~ supp, data = ToothGrowth)


用boxplot()函數(shù)繪制的箱線圖

在x軸上引入兩變量的交互

boxplot(len ~ supp + dose, data = ToothGrowth)


兩個(gè)變量相互的直方圖

對于ggplot2包肃叶,qplot() 函數(shù)可以繪制同樣的圖形蹂随,使用時(shí)將參數(shù)設(shè)定為geom="boxplot"?

library(ggplot2)

qplot(ToothGrowth$supp, ToothGrowth$len, geom="boxplot")


qplot()函數(shù)繪制的boxplot,要設(shè)置參數(shù)為 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()


分別用qplot()和ggplot()函數(shù)分別繪制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()


interaction函數(shù)繪制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)


用基礎(chǔ)繪圖函數(shù) curve ()繪制函數(shù)曲線

將參數(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")


自己定義函數(shù)并且畫一條曲線勿决,同時(shí)使用add=TRUE在原有函數(shù)的基礎(chǔ)上面添加新的曲線

也可以使用ggplot()函數(shù)進(jìn)行繪制

library(ggplot2)

# 這等價(jià)于

ggplot(data.frame(x=c(0, 20)), aes(x=x)) + stat_function(fun=myfun, geom="line")


用ggplot()函數(shù)繪制自己定義的函數(shù)曲線
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乒躺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子低缩,更是在濱河造成了極大的恐慌嘉冒,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咆繁,死亡現(xiàn)場離奇詭異讳推,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)玩般,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門银觅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人坏为,你說我怎么就攤上這事究驴。” “怎么了匀伏?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵纳胧,是天一觀的道長。 經(jīng)常有香客問我帘撰,道長,這世上最難降的妖魔是什么万皿? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任摧找,我火速辦了婚禮,結(jié)果婚禮上牢硅,老公的妹妹穿的比我還像新娘蹬耘。我一直安慰自己,他們只是感情好减余,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布综苔。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪如筛。 梳的紋絲不亂的頭發(fā)上堡牡,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機(jī)與錄音杨刨,去河邊找鬼晤柄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛妖胀,可吹牛的內(nèi)容都是我干的芥颈。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼赚抡,長吁一口氣:“原來是場噩夢啊……” “哼爬坑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起涂臣,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤盾计,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后肉康,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闯估,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年吼和,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涨薪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡炫乓,死狀恐怖刚夺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情末捣,我是刑警寧澤侠姑,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站箩做,受9級特大地震影響莽红,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜邦邦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一安吁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧燃辖,春花似錦鬼店、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滥玷。三九已至,卻和暖如春巍棱,著一層夾襖步出監(jiān)牢的瞬間惑畴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工拉盾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留桨菜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓捉偏,卻偏偏與公主長得像倒得,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子夭禽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評論 2 348

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

  • 作者:嚴(yán)濤浙江大學(xué)作物遺傳育種在讀研究生(生物信息學(xué)方向)偽碼農(nóng)霞掺,R語言愛好者,愛開源 ggplot2學(xué)習(xí)筆記之圖...
    wanghaihua888閱讀 2,605評論 0 6
  • 寫在前面 ggplot2 是一個(gè)功能強(qiáng)大且靈活的R包 讹躯,由Hadley Wickham 編寫菩彬,其用于生成優(yōu)雅的圖...
    Boer223閱讀 28,010評論 0 67
  • 作者:黃寶臣 數(shù)據(jù)科學(xué)/科學(xué)哲學(xué)碩士/本科生物狗知乎原文:https://www.zhihu.com/ques...
    iColors閱讀 1,055評論 0 2
  • 簡介 文章較長骗灶,點(diǎn)擊直達(dá)我的博客,瀏覽效果更好秉馏。本文內(nèi)容基本是來源于STHDA耙旦,這是一份十分詳細(xì)的ggplot2使...
    taoyan閱讀 51,011評論 7 159
  • 之前學(xué)習(xí)的繪圖方法是基于R的基礎(chǔ)繪圖系統(tǒng)。在R中一共有四種作圖系統(tǒng)萝究,分別為base(之前學(xué)的)免都、grid、latt...
    小貝學(xué)生信閱讀 1,764評論 0 7