第 4 章 stat functions

4.1 直方圖

4.1.1 間斷變數

  • geom_bar():用來呈現不同x類別的樣本個數。

    • 樣本個數會自動計算,呈現在y軸。
  • geom_col():用來呈現不同x類別下y值高度。

    • data frame要提供y值。
Britain may soon have one of the highest minimum wages in the world

圖 4.1: Britain may soon have one of the highest minimum wages in the world

4.1.2 geom_col

aes_y是由資料給定

座標旋轉coord_flip

請試著產生如下圖形:

  • 長條圖顏色: #5A99B3

  • 文字使用geom_text(aes(x=..,y=..,label=...))並更改color及nudge_y(可以有正負值,表示文字所放位置所對應y值要+或-多少)

4.1.4 連續變數

直方圖的另一個常見用法是將連續變數:

(一)先切成一段段不重疊的數值區間: 稱為binning,每個區間稱為bin。

(二)以每個bin為長條圖x軸的類別變數進行作圖

[1] 0.7385 -0.5148 -1.6402 0.9160 -1.2675 0.7382

[1] “[-2.26,-1.65]” “(-1.65,-1.04]” “(-1.04,-0.426]” [4] “(-0.426,0.186]” “(0.186,0.799]” “(0.799,1.41]”
[7] “(1.41,2.02]” “(2.02,2.64]”

[1] (0.186,0.799] (-1.04,-0.426] (-1.65,-1.04] [4] (0.799,1.41] (-1.65,-1.04] (0.186,0.799] 8 Levels: [-2.26,-1.65] … (2.02,2.64]

  • ggplot2::cut_interval(x,n=8): 將連續資料x分成n個區間,並將x值各別對應該所屬區間(形成x_interval)

4.1.5 geom_histogram

「geom_bar, geom_col」和geom_historgram最大的不同是長條間有沒有留空隙。連續型x變數應使用geom_histogram以正確保留其連續意涵。

4.1.6 optimal bins

原則上「樣本越大」、「資料越集中」則bin數目越多。有不少決定bins或binwidth的公式,大致上大同小異。這裡我們使用grDevices::nclass.FD(), 依Freedman-Diaconis法則選bins數。

[1] 10

4.2 stat function

  • stat_<計算方式>命名的函數。

  • 會自動計算某些aes mapping的geom, 其背後都有對應的stat_函數在背後進行計算,如geom_bar, geom_histogramaes(y=...) mapping內定是使用stat_count, stat_bin來計算。

4.2.1 stat_count與geom_bar

  • stat_count(): it counts the number of cases at each x position
    • aes x一定要有mapping設定。
    • 這裡aes可以不寫,因為graphList$圖書_ggplotOnly已有x=學院設定。geom內定會繼承ggplot這個top level的data及aes mapping設定。

4.2.2 stat_bin與geom_histogram

  • stat_bin(): 計算x mapping在各bin的出現次數。
    • aes x一定要有mapping設定。
    • x只適合連續型變數。
    • 內定30個bins。

4.2.3 stat與geom

ggplot的幾個stat函數均有內定和某個geom相呼應,可互相替換使用:

  • stat_count vs. geom_bar

  • stat_bin vs. geom_histogram

但在stat函數你可以把計算值用在其他geom上(即ggplots reference由所指的override)。

4.2.3.1 怎麼讀stat用法

  • 計算一定要有的aes mapping是什麼? stat_count一定要x

  • 它可以產生的computed values是什麼? stat_count的computed values: count(內定), prop

  • computate values要拿來當aes mapping變數時可以stat(<computed value name>)方式指定。

4.2.5 override stat

前面的圖在stat_count下無法進行nudge_y設定,而只有geom_text才可以。我們可以改使用geom_text,但override它的stat。

請以df_x完成下圖(bins=8):

請以df_x完成下圖(bins=8):

4.3 自創stat函數

This stat makes it easy to superimpose a function on top of an existing plot. The function is called with a grid of evenly spaced values along the x axis, and the results are drawn (by default) with a line.

stat_function(mapping = NULL, data = NULL, geom = "path",
  position = "identity", ..., fun, xlim = NULL, n = 101,
  args = list(), na.rm = FALSE, show.legend = NA,
  inherit.aes = TRUE)
  • 說明:https://ggplot2.tidyverse.org/reference/stat_function.html

  • fun:
    Function to use. Either 1) an anonymous function in the base or rlang formula syntax (see rlang::as_function()) or 2) a quoted or character name referencing a function; see examples. Must be vectorised.

  • n: Number of points to interpolate along

  • args:
    List of additional arguments to pass to fun

4.4 直方圖的position

geom_bar(position="XXX")其中XXX有以下選擇:

  • dodge:躲避
  • fill:填滿(標準化成同高度,呈現比重變化用)
  • stack:疊上

4.4.1 stack:堆疊

  • 強調各大類總額差別

  • 及各大類總額的次類組成份子大小

4.4.2 dodge:平行排列

  • 比較各大項內的小項差異

  • 也比較各小項在各大項內的差異

4.4.3 fill:百分比成份拆解

  • 強調組成份子比例的變化。

[1] “西元年份” “平均每戶可支配所得” [3] “最低所得組平均” “次低所得組平均”
[5] “中間所得組平均” “次高所得組平均”
[7] “最高所得組平均” “最低所得對平均所得” [9] “次低所得對平均所得” “中間所得對平均所得” [11] “次高所得對平均所得” “最高所得對平均所得”

[1] “西元年份” “平均每戶可支配所得” [3] “最低所得組平均” “次低所得組平均”
[5] “中間所得組平均” “次高所得組平均”
[7] “最高所得組平均” “對平均所得”
[9] “比例”