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