R繪圖 第一篇:ggplot2繪圖

ggplot2圖形系統的核心理念是把繪圖與數據分離,把數據相關的繪圖與數據無關的繪圖分離,按圖層做圖。ggplot2能夠把繪圖拆分紅多個圖層,且可以按照順序建立多重圖形。html

使用ggplot2包建立圖形時,每一個圖形都是由函數ggplot()建立的,提供繪圖的數據和映射:app

  • 數據(data):數據框對象
  • 映射(mapping):由aes()函數來設置映射

由幾何對象來控制繪製的幾何圖形,經過符號「+」來增長圖形的元素,這使得繪製圖形的過程結構化,同時使繪圖更具靈活性。ide

在ggplot2中, 圖形語法中至少包括了以下幾個圖形部件,每個部件能夠是一個圖層:函數

  • 幾何對象(geom)
  • 統計變換(stats)
  • 標度(scale)
  • 座標系(coord)
  • 分面(facet)
  • 主題(theme)

這些組件之間是經過「+」, 以圖層(layer)的方式來粘合構圖的,能夠這樣理解ggplot2中的圖層:每一個圖層能夠表明一個圖形組件, 這些圖形組件以圖層的方式疊加在一塊兒構成一個繪圖的總體,在每一個圖層中的圖形組件又能夠分別設定數據、映射或其餘相關參數,所以組件之間又是具備相對獨立性的。字體

在開始正文以前,推薦你們閱讀《ggplot2入門與進階(上)》,這篇文章寫的很是好。spa

一,數據和映射

使用函數ggplot()初始化圖形對象,並指定繪製圖形的數據集和座標軸的映射,在ggplot()函數中,指定數據集的默認設置,便於後續圖形選項的操做:debug

ggplot(data = NULL, mapping = aes())

兩個重要參數:code

  • data: 用於指定要用到的數據源,必須使數據框類型
  • mapping:使用aes()函數指定每一個變量的角色,除x和y以外的其餘參數,例如,size、color、shape等,必須採用name=value的形式。

在ggplot中設置的映射是默認映射關係,其餘圖層中能夠繼承該映射關係,或修改映射關係。component

1,數據htm

在ggplot2中, 所接受的數據集必須爲數據框(data.frame)格式,在下面的小節中,使用數據集mtcars做爲ggplot的輸入:

library(ggplot2)
data("mtcars")

2,映射

映射是指爲數據集中的數據關聯到相應的圖形屬性過程當中一種對應關係,ggplot2經過aes()函數來指定映射,把圖形屬性和數據關聯起來。

aes是英語單詞 aesthetics 的縮寫,中文意思是美學,aes用於指定圖形屬性。

aes(x, y, ...)

aes()函數中常見的映射選項是:

  • x和y:用於指定x軸和y軸映射的變量
  • color:映射點或線的顏色
  • fill:映射填充區域的顏色
  • linetype:映射圖形的線形(1=實線、2=虛線、3=點、4=點破折號、5=長破折號、6=雙破折號)
  • size:點的尺寸和線的寬度
  • shape:映射點的形狀

  • group:默認狀況下ggplot2把全部觀測點分爲了一組, 若是須要把觀測點按額外的離散變量進行分組處理, 必須修改默認的分組設置

注意,映射和設定是不一樣的:

  • 映射是將一個變量中離散或連續的數據與一個圖形屬性中以不一樣的參數來相互關聯,
  • 設定可以將這個變量中全部的數據統一爲一個圖形屬性。
p <- ggplot(mtcars, aes(wt, mpg)) 
p + geom_point(color = "blue") #設定散點的顏色爲藍色
p + geom_point(aes( color = "blue"))

最後一行語句爲錯誤的映射關係, 在aes中, color = 「blue」的實際意思是把」blue」當爲一個變量, 用這個變量裏的數據去關聯圖形屬性中的參數, 由於」blue」只含有一個字符變量, 默認狀況下爲離散變量, 按默認的顏色標度標記爲桃紅色。

3,分組

分組(group)是ggplot2中映射關係的一種,默認狀況下ggplot2把全部觀測點分爲了一組,若是須要把觀測點按指定的因子進行分組處理,必須修改默認的分組設置。

ggplot(data = mtcars, mapping = aes(x = wt, y = hp, group = factor(gear))) + 
  geom_line()

分組也能夠經過映射把視覺特徵(shape、color、fill、size和linetype等)設置爲變量來實現分組,分組一般使用因子來實現,這就要求在數據集中存在因子變量,用於對數據分類,實現圖形的分組。

ggplot(data=ds,aes(x=var1,y=var2,fill=var3,shape=var4))+
    geom_point()

二,幾何對象(geom)和統計變換(stat)

幾何對象控制圖層的渲染和生成的圖像類型,例如,geom_point()會生成散點圖,而geom_line會生成折線圖。統計變換是對數據進行統計,一般以某種方式對數據信息進行彙總, 例如經過stat_smooth()添加光滑曲線。
每個幾何對象都有一個默認的統計變換, 而且每個統計變換都有一個默認的幾何對象。在ggplot2的官方文檔中, 已對ggplot2中全部的geom和stat組件進行了彙總, 更詳細的內容, 可直接點開相應圖形組件所對應的連接。

函數ggplot()能夠設置圖形,可是沒有視覺輸出,須要使用一個或多個幾何函數向圖形中添加幾何對象(geometric,簡寫爲geom),包括點(point)、線(line)、條(bar)等,而添加幾何圖形的格式十分簡單,經過符號「+」把幾何圖形添加到plot中:

ggplot()+
geom_xxx()

例如,使用geom_point()函數輸出點狀圖形,並接收如下美學參數:alpha、colour、fill、group、shape、size和stroke,

ggplot(data=mtcars, aes(x=wt,y=mpg))+
  geom_point(color="red",size=1,shape=0)

經常使用的圖形參數是:

  • color:對點、線和填充區域的邊界進行着色
  • fill:對填充區域着色
  • alpha:演示的透明度,從透明(0)到不透明(1)
  • linetype:圖案的線條(1=實線、2=虛線、3=點、4=點破折號、5=長破折號、6=雙破折號)
  • size:點的尺寸和線的寬度
  • shape:點的形狀(和par()函數的pch參數相同)

  • position:繪製條形圖和點等對象的位置
  • binwidth:分箱的寬度
  • notch:表示方塊圖是否應該有缺口
  • sides:地毯圖的位置("b"=底部、"l"=左部、"r"=右部、"bl"=左下部,等)
  • width:箱線圖的寬度

三,標度(scale)

標度控制着數據到圖形屬性的映射,更重要的一點是標度將咱們的數據轉化爲視覺上能夠感知的東西, 如大小、顏色、位置和形狀。因此經過標度能夠修改座標軸和圖例的參數。關於標度,請查看官方文檔:Scales 

最經常使用的標度是:標籤、圖形選項(顏色、size、形狀、線形等)和座標軸

1,標籤

能夠經過函數labs()來指定圖形的標題(title),子標題(subtitle),座標軸的標籤(x,y)等,並能夠指定標籤的美學選項:

labs(...)

參數是美學(aesthetic)選項,使用name=value模式,可使用的選項是:

  • 指定文字:title、subtitle、caption、x和y
  • 指定美學選項:color、size等

2,自定義圖形選項

scale_colour_manual() 
scale_fill_manual() 
scale_size_manual() 
scale_shape_manual() 
scale_linetype_manual() 
scale_alpha_manual() 
scale_discrete_manual()

3,座標軸

標度是區分離散和連續變量的,標度用於將連續型、離散型和日期-時間型變量映射到繪圖區域,以及構造對應的座標軸。

四,座標系

座標系統肯定x和y美學如何組合以在圖中定位元素。默認的座標系是笛卡爾座標系,coord_cartesian(),笛卡爾座標系是最經常使用的座標系,函數coord_flip() 用於反轉笛卡爾座標系,把x軸和y軸對調。

五,刻面(facet)

分組和刻面都用於對數據分組,便於觀察各自的規律、趨勢和模式,不一樣的是,分組是把圖形繪製到一個大的圖形中,經過美學特徵來區分,而刻面是把圖形繪製到不一樣的網格中。

刻面是在一個畫布上分佈多幅圖形,這一過程須要先把數據劃分爲多個子集, 而後把每一個子集依次繪製到畫布的不一樣面板中。

ggplot2提供兩種分面類型:網格型(facet_grid)封面型(facet_wrap)

  • 網格刻面生成的是一個2維的面板網格, 面板的行與列經過變量來定義, 本質是2維的; 
  • 封裝刻面則先生成一個1維的面板條塊, 而後再分裝到2維中, 本質是1維的。

六,主題

主題(Theme)用於控制圖形中的非數據元素外觀,不會影響幾何對象和標度等數據元素,主題主要是對標題、座標軸標籤、圖例標籤文字調整, 以及網格線、背景、軸須的顏色搭配。

ggplot圖形的主題(theme)元素主要分爲5大類:圖形(plot)、面板(panel)、座標軸(axis)、圖例(Legend)和帶形(Strip),經過theme()函數來統一控制圖形的美學和文本特徵,能夠用於調整字體,背景色,前景色和網格線等。

對於面板的網格線,分爲主線(panel.grid.major)和 次線(panel.grid.minor ),用戶能夠根據繪製圖形的須要,顯示或隱藏。

關於主題的詳細用法,請查看官方文檔:Modify components of a theme 和 Theme elements

Theme()中每個參數的賦值,能夠經過元素函數來實現,margin()函數用於指定元素的邊界,element_xxx用於控制矩形,線條和文本的填充(fill)、顏色,size、形狀等

margin(t = 0, r = 0, b = 0, l = 0, unit = "pt")
element_blank()
element_rect(fill = NULL, colour = NULL, size = NULL, linetype = NULL, color = NULL, inherit.blank = FALSE) element_line(colour = NULL, size = NULL, linetype = NULL, lineend = NULL, color = NULL, arrow = NULL, inherit.blank = FALSE) element_text(family = NULL, face = NULL, colour = NULL, size = NULL, hjust = NULL, vjust = NULL, angle = NULL, lineheight = NULL, color = NULL, margin = NULL, debug = NULL, inherit.blank = FALSE)

 

參考文檔:

Aesthetic specifications

ggplot2 Reference

相關文章
相關標籤/搜索