options(repos=structure(c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/")))
install.packages('tidyverse')
library(tidyverse)
我們剛才下載的tidyverse包中有很多可以進行分析的數據集,如mpg diamonds ……
mpg數據集
在R中輸入"?mpg"可以查看mpg數據集的詳細信息。mpg是一個234*11的數據集。這裡對mpg數據集做一個簡介。
manufacturer:manufacturer name(製造商)
model:model name(型號)
displ:engine displacement, in litres(發動機排量)
year:year of manufacture(製造年份)
cyl:number of cylinders(氣缸數)
trans:type of transmission(變速器類型)
drv:the type of drive train, where f = front-wheel drive, r = rear wheel drive, 4 = 4wd(驅動類型)
cty:city miles per gallon(每加侖可走城市英裡)
hwy:highway miles per gallon(每加侖可走告訴英裡)
fl:fuel type(燃油類型)
class:"type" of car(車型)
從一個簡單的繪圖開始~
代碼:
ggplot(mpg)+
geom_point(aes(displ,hwy))
結果:
可以看出ggplot作圖非常簡便,上述語句就是在說:對mpg這個數據集的displ和hwy兩個變量作散點圖。
這樣看這個圖形,是不是想換個顏色?
代碼:
ggplot(mpg)+
geom_point(aes(displ,hwy),color = 'blue')
結果:
其實這裡存在一個問題:我們的數據有234個點,但圖中的散點應該沒有234個吧!這種現象叫「過繪製」。這是因為繪圖的時候對displ和hwy進行了四捨五入,所以很多點都顯示不出來了。為了解決「過繪製」問題,可以給每個數據點增加隨機擾動。
代碼:
ggplot(mpg)+
geom_point(aes(displ,hwy),position = 'jitter')
結果:
我們可能見過這樣的圖:用不同顏色表示不同群體的情況。如不同性別的人消費情況如何,針對這個情形,通常會用不同的顏色表示男性和女性的消費情況,那麼圖形可能是男性的消費情況用紅色表示,女性的消費情況用藍色表示,那麼你想像好圖形是怎樣的了嘛?在ggplot2中很容易實現,只需要稍微添加一些參數即可。這裡以mpg數據集為例,做出不同類型的汽車,它們的發動機大小和耗油情況。
代碼:
ggplot(mpg)+ #+不能放在一行的開頭,你儘管試試,看看會不會出錯。
geom_point(aes(displ,hwy,color = class))
結果:
註:初次接觸mpg數據集的人可能會對各個變量產生很多困惑,別著急哈,小編一開始也是這樣的。這裡先說明displ這個變量,它的含義是發動機排量。其實你也可以理解為引擎大小。另外,關於color位置的放置,如你所見,放在aes外面 就是全局的改變,放在aes裡面,其實相當於進行了分組,不同的組顏色不一樣。上面是用顏色查看不同類型汽車的一些情況,那麼其實也可以用大小來看看它們的具體情況。
代碼:
ggplot(mpg)+
geom_point(aes(displ,hwy,size = class))
結果:
如果用透明度或者形狀呢?
代碼:
ggplot(mpg)+
geom_point(aes(displ,hwy,alpha = class))
結果:
代碼:
ggplot(mpg)+
geom_point(aes(displ,hwy,shape = class))
結果:
其實這幅圖「醜到爆」。也不是為了說明什麼問題,想表達的意思就是你可以用顏色、大小、透明度、形狀等等反映某種情況,進行詳細深入的分析。當然,如果你使用的是形狀(shape),那可能就要小心一點,因為ggplot2默認顯示6中形狀,如果多於6種,剩下的就不會顯示在圖形上,切記!
總結一下,常用的點屬性參數。
color:點的顏色
size:點的大小
stroke:點的邊框大小
fill:點的填充顏色
shape:點的形狀
註:shape取值0~14的邊界顏色由color決定,15~20的填充顏色由color決定,21~24的邊界顏色由color決定,填充顏色由fill決定。以上介紹了用顏色、大小、形狀、透明度對圖形的散點進行歸類,下面介紹分面。分面其實就是將數據分成不同的子集。
對單個離散型變量進行分面。
代碼:
ggplot(mpg)+
geom_point(aes(displ,hwy))+
facet_wrap(~class,nrow = 2)
結果:
對單個離散型變量進行分面用到facet_wrap(),nrow=2表示圖形排列成兩行,相應的有ncol屬性,可以儘管試試。
對兩個變量進行分面。
代碼:
ggplot(mpg)+
geom_point(aes(displ,hwy))+
facet_grid(drv~cyl)
結果:
前面只是介紹了geom_point()這個幾何對象,ggplot2中還有很多幾何對象。
其實還可以將這些幾何對象繪製在一張圖上。
代碼:
ggplot(mpg,aes(displ,hwy))+
geom_point(aes(color = drv))+
geom_smooth(aes(group = drv),color = 'red')
結果:
可以注意到代碼中aes(displ,hwy)的位置發生了改變,這樣做是因為geom_point()和geom_smooth()依賴的數據是一樣的,以後再畫圖的時候,就可以靈活地書寫代碼了。
再介紹一下坐標系。從箱線圖開始吧。
代碼:
ggplot(mpg)+
geom_boxplot(aes(class,hwy))
結果:
如果將x和y進行交換。
代碼:
ggplot(mpg)+
geom_boxplot(aes(class,hwy))+
coord_flip()
結果:
有些時候就是簡單地將x與y進行交換,就更易於看圖的人對圖進行分析。
當然ggplot2這一塊還有很多內容,它還能做出很多複雜的圖形,後期也會做更多的介紹,這裡先入一下門吧,當然也建議大家盡情嘗試這些美妙的函數。
學到這裡,其實你已經可以做一些簡單的圖形了,不如嘗試著繪製上面的四幅圖吧(有些模糊,忍忍哈)。
diamonds數據集
在R中輸入"?diamonds"可以查看diamonds數據集的詳細信息。diamons是一個53940*10的數據集。同樣,對diamonds數據集做一個簡介。
price:price in US dollars(價格)
carat:weight of the diamond (0.2–5.01)(鑽石大小)
cut:quality of the cut (Fair, Good, Very Good, Premium, Ideal)(鑽石切割質量)
color:diamond colour, from D (best) to J (worst)
clarity:a measurement of how clear the diamond is (I1 (worst), SI2, SI1, VS2, VS1, VVS2, VVS1, IF (best))(鑽石淨度)
從一個簡單的條形圖開始吧。
代碼:
ggplot(diamonds)+
geom_bar(aes(cut))
結果:
注意到縱坐標是count,這顯然和我們的認知是一樣的。該條形圖是cut不同取值下對應的頻數分布圖。那我們思考一個問題:count從何而來?答案是繪圖的時候自動計算出來的。對於geom_bar(),其實還計算了prop。接下來將
條形圖的縱坐標換成prop。
代碼:
ggplot(diamonds)+
geom_bar(aes(x = cut,y = ..prop..,group = 1))
結果:
可以試試,沒有"group = 1"會怎麼樣?
在散點圖中,我們用顏色等屬性進行了分類,在條形圖中依然可以!
代碼:
ggplot(diamonds,aes(cut,fill = clarity))+
geom_bar()
結果:
不知道你喜不喜歡,這個圖反正我不喜歡!增加一個參數"position = 'dodge'"。
代碼:
ggplot(diamonds,aes(cut,fill = clarity))+
geom_bar(position = 'dodge')
結果:
這個是將每組的條形並列放置,方便比較不同切割質量下鑽石的淨度情況。好吧,還是有點醜。
那麼今天就講這麼多啦~