Chapter 4 Understand Geom

4.1 Preparation

Import data

library(readr)
InterestRateData <- read_csv("https://raw.githubusercontent.com/tpemartin/github-data/master/InterestRateData.csv")
subsetDataTWbank <- read_csv("https://raw.githubusercontent.com/tpemartin/github-data/master/subsetDataTWbank.csv")

Prepare Chinese font

library(showtext)
font_add("QYuan","cwTeXQYuan-Medium.ttf") # 新增字體
showtext_auto(enable=TRUE)

Clean up data

選變數

library(dplyr)
subsetData <- InterestRateData %>%
  select(銀行,
           年月,
           `定存利率-一個月-固定`,
           `定存利率-二年期-固定`,
           `定存利率-三年期-固定`)

轉換日期

TWdate2West <- function(TWdate){
  library(stringr)
  library(lubridate)
  westDate <- str_c("1",TWdate,"/01") # 等於加了1000年及01日
  westDate <- ymd(westDate)  # recursive definition
  westDate <- westDate + years(911)
}

subsetData$西元年月 <- TWdate2West(subsetData$年月)

處理問題資料

原始資料在每一家銀行開頭又有變數名稱,造成NA (Not Applicable) 觀察值

# 原始資料在每一家銀行開頭又有變數名稱
subsetData %>% filter(!is.na(西元年月)) -> subsetData

調整class

subsetData[,3:5] %>% mutate_all(as.numeric) -> subsetData[,3:5]

定義畫布ggplot()

臺灣銀行資料畫布

library(ggplot2)
subsetData %>% filter(銀行=="臺灣銀行") -> subsetDataTWbank
subsetDataTWbank %>%
  ggplot(aes(x=西元年月,y=`定存利率-一個月-固定`)) 

subsetDataTWbank_canvas <- .Last.value

五家銀行畫布

subsetData %>%
  ggplot(aes(x=西元年月,y=`定存利率-一個月-固定`))

subsetData_canvas <- .Last.value

.Last.value代表最近一次程式執行後電腦畫面的物件。

畫上geom幾何圖形

subsetDataTWbank_canvas+geom_line()
## NULL
subsetData_canvas+geom_line()
## NULL
銀行 西元年月 定存利率-一個月-固定
第一銀行 2001-01-01 4.30
臺灣銀行 2001-01-01 4.40
合作金庫 2001-01-01 4.40
彰化銀行 2001-01-01 4.30
華南銀行 2001-01-01 4.30
第一銀行 2001-02-01 4.30
臺灣銀行 2001-02-01 4.25
合作金庫 2001-02-01 4.25
彰化銀行 2001-02-01 4.30
華南銀行 2001-02-01 4.30

4.2 Layers

所有的Layers都可以壘加上去

subsetDataTWbank_canvas+
  geom_line()+
  geom_point()

NULL

4.3 geom_xxx() usage

完整說明

Usage

geom_xxx(mapping=NULL, data=NULL, …)

  • mapping: aes()

    • data:

      • case 1: If NULL, the default, the data is inherited from the plot data as specified in the call to ggplot().

      • case 2: A data.frame, or other object, will override the plot data.

      • case 3: A function will be called with a single argument, the plot data. The return value must be a data.frame., and will be used as the layer data.

data

case 1

subsetDataTWbank_canvas+
  geom_line()+
  geom_point()
## NULL

case 2
One way

firstBank<-subsetData %>% filter(銀行=="第一銀行")
subsetDataTWbank_canvas+
  geom_line()+
  geom_line(data=firstBank,color='red')
## NULL

Another

subsetDataTWbank_canvas+
  geom_line()+
  geom_line(
    data=(
      subsetData %>% filter(銀行=="第一銀行")
      ),
    color='red')
## NULL

在臺灣銀行線圖點上第一銀行的資料點

Aesthetics

參考資料:Aesthetics in geom_line()

只畫臺灣銀行

subsetDataTWbank_canvas+
  geom_line()
## NULL

size

subsetDataTWbank_canvas+
  geom_line(size=2)
## NULL

4.4 Aesthetics: linetype

Two ways to specify it.

By name

subsetDataTWbank_canvas+
  geom_line(linetype="dashed")
## NULL

By hex string

用數字來定義一個完整線段的形式。 “33”:3個點距的「線」,接3個點路的「空白」

連線數字分別代表:「線」「空白」「線」「空白」依此類推

subsetDataTWbank_canvas+
  geom_line(linetype="33")
## NULL
subsetDataTWbank_canvas+
  geom_line(linetype='2451')
## NULL

4.5 Aesthetics: mapping

當美學(aesthetics)選項放在mapping時,可產生視覺化的分群效果。

畫所有銀行

subsetData_canvas+
  geom_line()
## NULL
subsetData_canvas+
  geom_line(aes(linetype=銀行))
## NULL
subsetData_canvas+
  geom_line(aes(color=銀行))
## NULL