標籤:app photoshop clipboard strong data- code 映射 直條圖 gravity
R語言裡面一個比較重要的繪圖包——ggplot2,是由Hadley Wickham於2005年建立,於2012年四月進行了重大更新,作者目前的工作是重寫代碼,簡化文法,方便使用者開發和使用。ggplot2的核心理念是將繪圖與資料分離,資料相關的繪圖與資料無關的繪圖分離,是按圖層作圖,有利於結構化思維,同時它保有命令式作圖的調整函數,使其更具靈活性,繪製出來的圖形美觀,同時避免繁瑣細節。ggplot2可以通過底層組件構造前所未有的圖形,你所受到的限制只是你的想象力。
它大概可以分為三個部分:
(1)資料層(2)幾何圖形層(3)美學層;
如果你用過photoshop,那麼對於圖層你一定不會陌生。圖層好比是一張玻璃紙,它包含有各種圖形元素,你可以分別建立圖層然後可以按照不同順序疊放在一起,組合成圖形的最終效果。因此圖層可以允許使用者一步步的構建圖形,方便單獨對圖層進行修改、增加統計量、甚至改動資料,因此繪製出來的圖形一般十分漂亮並且符合自己的意願。
ggplot2大致包含了一下幾個基本概念:
? 資料(Data)和映射(Mapping)
? 標度(Scale)
? 幾何對象(Geometric)
? 統計變換(Statistics)
? 座標系統(Coordinate)
? 圖層(Layer)
? 分面(Facet)
資料(Data)和映射(Mapping)
將資料中的變數映射到圖形屬性。映射控制了二者之間的關係。
標度(Scale)
標度負責控制映射後圖形屬性的顯示方式。具體形式上來看是圖例和座標刻度。Scale和Mapping是緊密相關的概念。
幾何對象(Geometric)
幾何對象代表我們在圖中實際看到的圖形元素,如點、線、正方塊等多邊形。
統計變換(statistics)
對未經處理資料進行某種統計計算,例如對二元散佈圖加上一條迴歸線或者信賴區間登記。
分面(Facet)
條件繪圖,將資料按某種方式分組,然後分別繪圖。分面就是控制分組繪圖的方法和排列形式。
我們使用ggplot2內建的資料集mpg,它包含了1999年和2008年之間 EPA使上可用燃料經濟性資料的一個子集等資訊。它總共有234行,11列資料。
載入了ggplot2包之後,可以使用如下語句繪製出
[plain] view plain copy
- ggplot(data=mpg,mapping = aes(x=cty,y=hwy))+geom_point()+aes(colour=factor(mpg$year))
其中data=mpg,mapping = aes(x=cty,y=hwy)表示資料層,geom_point()表示幾何圖形層,aes(colour=factor(mpg$year))表示美學圖層。我將year映射為映射到顏色屬性。如過我們把上面句子寫成如下:
[plain] view plain copy
- ggplot(data=mpg,mapping = aes(x=cty,y=hwy))
則它什麼也不會繪出來,因為他缺少幾何圖形層。寫成下面語句繪製出來的散佈圖全是黑點,因為它缺少美學圖層
[plain] view plain copy
- ggplot(data=mpg,mapping = aes(x=cty,y=hwy))+geom_point()
如果我們覺得這些點太小或者太大的時候,我們可以通過改變size的參數來調節散點的大小,一般使用方法是size=I(x);這個I()最好加上,否則有的時候會出現莫名奇怪的錯誤,有的時候不加也行,直接size=x也行,x為散點的大小,它一般按照使用者的經驗或一次次試來確定大小的。
[plain] view plain copy
- ggplot(data=mpg,mapping = aes(x=cty,y=hwy))+geom_point(size=I(7))+aes(colour=factor(mpg$year))
我們也可以繪製出它的擬合曲線以及信賴區間,它根據年份繪出了兩條擬合曲線以及信賴區間。
[plain] view plain copy
- ggplot(data=mpg,mapping = aes(x=cty,y=hwy))+geom_point()+aes(colour=factor(mpg$year))+stat_smooth()
但如果我們只想繪製一條擬合曲線和一個信賴區間,我們只需要將代碼稍微改變一下就可以搞定。
[plain] view plain copy
- ggplot(data=mpg,mapping = aes(x=cty,y=hwy))+geom_point(aes(colour=factor(mpg$year)))+stat_smooth()
在前面,我們將year變數映射到散點的顏色上面,現在我們也可以將displ變數映射到散點大小,繪製出來的大小不同的散點。
[plain] view plain copy
- ggplot(data=mpg,mapping =aes(x=cty,y=hwy))+
- geom_point(aes(colour=factor(year),size=displ))+
- stat_smooth()
使用過Photoshop的人一定知道透明度,即alpha。當然我們的ggplot2包也提供相關參數,可以改變alpha值得大小來改變散點的透明度。alpha的值在0—1之間,不在這個範圍的話則會報錯。為了與前面的圖片有明顯的區別,我再這裡的alpha值調的比較小。一般預設alpha值得大小為1。
[plain] view plain copy
- ggplot(data=mpg,mapping = aes(x=cty,y=hwy))+
- geom_point(aes(colour=factor(mpg$year),size=displ),alpha=0.25)+
- stat_smooth()
當然我們也可以給圖片增加標題,並精細修改圖片,給圖片增加x,y軸說明,以及其他說明。
[plain] view plain copy
- ggplot(mpg, aes(x=cty, y=hwy))+
- geom_point(aes(colour=class,size=displ),alpha=0.6,position = "jitter")+
- stat_smooth()+
- scale_size_continuous(range = c(4, 10))+
- facet_wrap(~ year,ncol=1)+
- ggtitle("汽車油耗與型號")+
- labs(y=‘每加侖高速公路行駛距離‘,
- x=‘每加侖城市公路行駛距離‘)+
- guides(size=guide_legend(title=‘排量‘),
- colour = guide_legend(title=‘車型‘,
- override.aes=list(size=5)))
寫的比較早的部落格或者論壇上面會有opts()函數來給圖片命名,不過只有在以前的ggplot2包版本裡面有opts()函數,但現在比較新的ggplot2包裡面已經沒有該函數了,如果你使用較新的ggplot2包使用該函數則會提示你找不到該函數,因為它已經被替換為ggtitle(),使用方法如上面代碼。
上面代碼裡面有一個position的函數,通過調整參數來改變圖層的位置,現在ggplot2隻有5種,再往回版本的更新,也許會增加。大家可以修改position函數的參數來觀測不同參數繪製出來的圖形會有哪些變化。
fill:填充方式, 先把資料歸一化,再填充到繪圖區的頂部。
dodge:比如說不同折線的標記有可能重複,可以改變改參數進行一個“避讓”方式,即往旁邊閃,比如說如直條圖的並排方式。
identity:原地不動,不調整位置,預設。
jitter:如果嚴重的重疊,隨機抖一抖,讓本來重疊的露出點頭來
stack:在豎直方向疊羅漢,繪製出來類似橫條圖
在有的時候我們需要把一個變數和其他不同的變數進行一個對比,這個時候我們就需要把他們畫在同一張圖上面。ggplot2繪圖就和Photoshop有一個功能很相似,那就是 圖層, 我們可以把不同的圖層疊加在一起,這樣就畫在了同一張圖上面。比如說我們要研究mpg資料中cty和hwy,以及displ之間的關係,我們就可以通過如下代碼,將他們之間的散佈圖畫在一起。
[plain] view plain copy
- ggplot()+
- geom_point(aes(x=mpg$cty,y=mpg$hwy),color="red")+
- geom_point(aes(x=mpg$cty,y=mpg$displ),color="green")
結果如:兩個因變數用不同的顏色來表示。
接下來,我們來繪製一個扇形圖,我們來統計一下class中各個品牌所佔比例,代碼和圖片如下:[plain] view plain copy
- ggplot(mpg)+geom_bar(width=1, aes(x=factor(1),fill=mpg$class))+
- coord_polar(theta="y")
我們也可以通過使用ggplot2包來繪製 Coxcomb Plots (雞冠花圖,又名玫瑰圖),這個也非常簡單。width的值可以調整各個扇形地區之間的距離。
[plain] view plain copy
- ggplot(mpg, aes(x = factor(mpg$class))) +
- geom_bar(width = 0.7,aes(color=factor(mpg$class))) + coord_polar()
當然我們也可以給他增添顏色,代碼只要稍微改一下:
[plain] view plain copy
- ggplot(mpg, aes(x = factor(mpg$class),fill=mpg$class)) +
- geom_bar(width = 0.7) + coord_polar()
轉載請註明原文連結:http://blog.csdn.net/wzgl__wh/article/details/51901093
快速學習ggplot2