快速學習ggplot2

來源:互聯網
上載者:User

標籤: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  
  1. 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  
  1. ggplot(data=mpg,mapping = aes(x=cty,y=hwy))  


則它什麼也不會繪出來,因為他缺少幾何圖形層。寫成下面語句繪製出來的散佈圖全是黑點,因為它缺少美學圖層

 

 

[plain] view plain copy  
  1. ggplot(data=mpg,mapping = aes(x=cty,y=hwy))+geom_point()  

    如果我們覺得這些點太小或者太大的時候,我們可以通過改變size的參數來調節散點的大小,一般使用方法是size=I(x);這個I()最好加上,否則有的時候會出現莫名奇怪的錯誤,有的時候不加也行,直接size=x也行,x為散點的大小,它一般按照使用者的經驗或一次次試來確定大小的。

 

[plain] view plain copy  
  1. ggplot(data=mpg,mapping = aes(x=cty,y=hwy))+geom_point(size=I(7))+aes(colour=factor(mpg$year))  

 

我們也可以繪製出它的擬合曲線以及信賴區間,它根據年份繪出了兩條擬合曲線以及信賴區間。

 

 

[plain] view plain copy  
  1. ggplot(data=mpg,mapping = aes(x=cty,y=hwy))+geom_point()+aes(colour=factor(mpg$year))+stat_smooth()  


 

但如果我們只想繪製一條擬合曲線和一個信賴區間,我們只需要將代碼稍微改變一下就可以搞定。

 

[plain] view plain copy  
  1. ggplot(data=mpg,mapping = aes(x=cty,y=hwy))+geom_point(aes(colour=factor(mpg$year)))+stat_smooth()  

 

 

在前面,我們將year變數映射到散點的顏色上面,現在我們也可以將displ變數映射到散點大小,繪製出來的大小不同的散點。

 

[plain] view plain copy  
  1. ggplot(data=mpg,mapping =aes(x=cty,y=hwy))+  
  2.   geom_point(aes(colour=factor(year),size=displ))+  
  3.   stat_smooth()  



 

使用過Photoshop的人一定知道透明度,即alpha。當然我們的ggplot2包也提供相關參數,可以改變alpha值得大小來改變散點的透明度。alpha的值在0—1之間,不在這個範圍的話則會報錯。為了與前面的圖片有明顯的區別,我再這裡的alpha值調的比較小。一般預設alpha值得大小為1。

 

[plain] view plain copy  
  1. ggplot(data=mpg,mapping = aes(x=cty,y=hwy))+  
  2.   geom_point(aes(colour=factor(mpg$year),size=displ),alpha=0.25)+  
  3.   stat_smooth()  

      當然我們也可以給圖片增加標題,並精細修改圖片,給圖片增加x,y軸說明,以及其他說明。

 

[plain] view plain copy  
  1. ggplot(mpg, aes(x=cty, y=hwy))+   
  2.   geom_point(aes(colour=class,size=displ),alpha=0.6,position = "jitter")+  
  3.   stat_smooth()+  
  4.   scale_size_continuous(range = c(4, 10))+  
  5.   facet_wrap(~ year,ncol=1)+  
  6.   ggtitle("汽車油耗與型號")+  
  7.   labs(y=‘每加侖高速公路行駛距離‘,  
  8.        x=‘每加侖城市公路行駛距離‘)+  
  9.   guides(size=guide_legend(title=‘排量‘),  
  10.          colour = guide_legend(title=‘車型‘,  
  11.                                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  
  1. ggplot()+  
  2.   geom_point(aes(x=mpg$cty,y=mpg$hwy),color="red")+  
  3.   geom_point(aes(x=mpg$cty,y=mpg$displ),color="green")  

結果如:兩個因變數用不同的顏色來表示。

 

接下來,我們來繪製一個扇形圖,我們來統計一下class中各個品牌所佔比例,代碼和圖片如下:[plain] view plain copy  
  1. ggplot(mpg)+geom_bar(width=1, aes(x=factor(1),fill=mpg$class))+  
  2.   coord_polar(theta="y")   

    我們也可以通過使用ggplot2包來繪製 Coxcomb Plots (雞冠花圖,又名玫瑰圖),這個也非常簡單。width的值可以調整各個扇形地區之間的距離。

 

 

[plain] view plain copy  
  1. ggplot(mpg, aes(x = factor(mpg$class))) +  
  2.   geom_bar(width = 0.7,aes(color=factor(mpg$class))) + coord_polar()  


 

當然我們也可以給他增添顏色,代碼只要稍微改一下:

 

[plain] view plain copy  
  1. ggplot(mpg, aes(x = factor(mpg$class),fill=mpg$class)) +  
  2.   geom_bar(width = 0.7) + coord_polar()  



 

 

轉載請註明原文連結:http://blog.csdn.net/wzgl__wh/article/details/51901093

快速學習ggplot2

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.