第 4 章 stat functions and positions

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_<計算方式>命名的函數。

    • 會從required aesthetics計算結果,產生computed variables.

    • 本身會自成一個layer,用geom=...來設定此layer的幾何圖像。

    • aes(....)來設定此layer的mapping及required aesthetics。

4.2.1 一體兩面stat/geom

stat_count與geom_bar

  • geom_bar(…, stat=“count”)

  • stat_count(…, geom=“bar”)
  • stat_count(): it counts the number of cases at each x position.

    • required aesthetics: x; computed variables: count, prop.

使用geom_bar

使用stat_count

要取出compute variable可以用stat(<compute variable>)..<compute variable>..

4.2.2 override geom

stat_count與geom_bar只是在預設值下為一體兩面,實際上可以更改預設值做更有彈性使用,例如:

stat_count(
    aes(x=學院,y=stat(count),label=stat(count)), geom="text"
  )
  • 將stat_count的結果結合出aes(x=學院,y=stat(count),label=stat(count)) mapping用來進行geom_text繪製。

改成比例使用prop這個computed value.

stat_count的prop定義為groupwise proportion:

  • 內定group=x,此時會去算不同x值在不同x群的比例,最後只有1或0(0圖面看不出來)

  • 要算在全體資料下的prop可以設定group=某固定值(值的type不重要,重點是固定)。

4.2.3 override stat

雖然任何layer都可以由geom或stat產生,但兩者是不同的object,geom是geometric object而stat是statistical transformation object。有些設定只對某一個object type有效,如geom_text底下的nudge。

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

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

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

4.2.4 自創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)

4.2.5 stat_summary

stat_summary/stat_summary_bin:

  • 將每個 x 或 binned x下的所有「y值丟到指定函數」去計算圖面所要的y, ymin, ymax三個aes mapping.

  • 無computed variables to call, 會直接設定y, ymin, ymax三個mapping。

stat_summary_2d/stat_summary_hex:

  • 將每個 x,y下的所有「z值丟到指定函數」去計算圖面所要的summary statistics.

  • computed variables: value (即summary statistics值)

4.3 Positions

所有的geom都有position設定,如:geom_bar(position="stack")

4.3.2 fill

  • fill:填滿
    相同x值下有多個y值時(標準化成同高度,呈現比重變化用)
    使用position="fill"position=position_fill(...)設定,後者有更多調整彈性。

4.3.4 geom_bar應用

position_dodge

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

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

使用position_dodge()微調

當geom有使用stat函數時,其計算後用來作圖的資料可用ggplot_build()產生:

  • 存在產生list物件的data元素裡,data是個list,其數字代表圖面對應layer層次。
   fill   y x label PANEL group colour size angle

1 #31688EFF 52 1 52 1 2 black 3.88 0 2 #35B779FF 53 1 53 1 3 black 3.88 0 3 #FDE725FF 22 1 22 1 4 black 3.88 0 4 #440154FF 1 2 1 1 5 black 3.88 0 5 #31688EFF 100 2 100 1 6 black 3.88 0 6 #35B779FF 124 2 124 1 7 black 3.88 0 hjust vjust alpha family fontface lineheight 1 0.5 0.5 NA 1 1.2 2 0.5 0.5 NA 1 1.2 3 0.5 0.5 NA 1 1.2 4 0.5 0.5 NA 1 1.2 5 0.5 0.5 NA 1 1.2 6 0.5 0.5 NA 1 1.2