第 4 章 Graphing Basics
4.1 Drake Rmd📋
老師課堂練習repo:109-1-econDV/drake_plans/drake_graphing_basics.Rmd
先Active Rmd -> Drake Plan -> Make, Visualize active plan都沒問題即可進入本課題。
4.2 設定中文字體
Package: showtext
參考資料
showtext: https://github.com/yixuan/showtext
extrafont: https://github.com/wch/extrafont
R環境中文字形
# R在你電腦上找得到的字形
font_files() # 查詢有什麼字形
font_add("notoSansTC", # 把字形加到R系統裡,取名為notoSansTC family
regular="NotoSansTC-Regular.otf", # family裡的regular字體檔名
bold="NotoSansTC-Bold.otf") # family裡的bold字體檔名
font_families() # 查看notoSansTC family有沒有成功加入# Google提供的字形
font_families_google() %>%
stringr::str_subset(regex("noto", ignore_case = T)) # 鎖定東方語系字形系列Noto
font_add_google("Noto Sans TC") # 加入無襯字的Noto繁體中文
font_families() # 查看notoSansTC family有沒有成功加入ggplot2中文字形
library(showtext)
showtext_auto()
theme(
text=element_text(family = "Noto Sans TC")
) %>%
theme_set()你也可以在你的.Rprofile或drake makecondition裡加上:
font_add_google("Noto Sans TC") # 加入無襯字的Noto繁體中文
showtext_auto(enable=TRUE) #啟用字體
ggplot2::theme(
text=ggplot2::element_text(family="Noto Sans TC")
) -> themeTextSetting
ggplot2::theme_set(
themeTextSetting
)R Markdown設定
如果你的圖是要在R Markdown裡直接knitr後呈現,不像我們這學期是要輸出後製的話,你要在setup chunk增加
knitr::opts_chunk$set(fig.showtext=TRUE, fig.retina = 1)4.3 Essential Elements
4.3.1 makecondition
假設你的font_families()已有“Noto Sans TC”
library(readr)
library(ggplot2)
library(drake)
library(rmd2drake)
library(dplyr)
library(showtext)
font_add(
"Noto Sans TC",
regular="NotoSansTC-Regular.otf",
bold="NotoSansTC-Bold.otf")
# font_add_google("Noto Sans TC")
showtext_auto()
theme(
text=element_text(family = "Noto Sans TC")
) %>%
theme_set()
rprojroot::is_rstudio_project -> pj
pj$make_fix_file() -> root4.3.2 ggplot()
# <<canvas>>
canvas <- ggplot()generates a list of information holder
the object has a class of “ggplot” which equip with a print method that maps the list of information into a data visualization graph.
class(canvas)
canvas # deliver the result of its print methodstr(canvas,1)顯示一個完整的ggplot物件所需要的9個元素。
4.3.3 Layer-add operator: +
Add/fill detail information to canvas (i.e. the list-of-9-elements ggplot object) for a layer.
4.3.4 Geom layers
Generate information of geometric objects from data for adding to canvas
canvas+geom_line(...)
canvas+geom_density(...)
:
canvas+geom_tile(...)4.3.5 Geom layers setup
mapping=aes(x=dataframe_variable1, y=dataframe_variable2, ...)data=a data frame
原始資料
# <<big5bankInterestRates>>
big5bankInterestRates = read_csv("https://www.cbc.gov.tw/public/data/OpenData/A13Rate.csv")經過整理得到臺灣銀行不同期限定存之(年)利率(使用Drake addin: Loadd target at cursor可直接把subsetDataTWbank叫進global environment)
# <<subsetDataTWbank>>資料data: subsetDataTWbank
座標對應coordinate:
x=西元年月,y=`定存利率-一個月-固定`
- 幾何圖示類型geom: line
Usage:
geom_line(
mapping=aes(x=...,y=...)
data=...
)- arguments定義順序是mapping, data. (沒有寫
mapping=,data=時要依定義順序放input arguments)
library(ggplot2)
# <<ggline>>
canvas +
geom_line(
mapping=aes(x=西元年月,y=`定存利率-一個月-固定`),
data=subsetDataTWbank
)
# 或
canvas +
geom_line(
aes(x=西元年月,y=`定存利率-一個月-固定`),
subsetDataTWbank
)When data and mapping are required, geom function put mapping first and data second. So you can also write:
canvas +
geom_line(
mapping=aes(x=西元年月,y=`定存利率-一個月-固定`),
data=subsetDataTWbank
)
# or 省略input argument names **only if you following their definition orders**
canvas +
geom_line(
aes(x=西元年月,y=`定存利率-一個月-固定`),
subsetDataTWbank
)幾何圖示類型為point
# <<ggpoint>>
canvas+
geom_point(
aes(x=西元年月,y=`定存利率-一個月-固定`),
subsetDataTWbank
)4.3.6 Layer stacking
geom_...可以不斷以+層疊上去。
# <<ggLinePoint>>
ggline +
geom_point(
aes(x=西元年月,y=`定存利率-一個月-固定`),
subsetDataTWbank
)不同期限利率一層層疊上去
# <<ggline3M>>
ggline3M
# <<ggline1Y>>
ggline1Y
# <<ggline2Y3Y>>
ggline2Y3Y查看最後的ggplot物件
ggline2Y3Y:Layers元素每個都有重覆的subsetDataTWbank
可以把subsetDataTWbank移到一開始的
ggplot()裡,則後面的geom都可以不寫data
# <<canvas2>>
canvas2 = ggplot(data=subsetDataTWbank)# <<ggline2Y3Y_2>>
ggline2Y3Y_2 = {
canvas2 +
geom_line(
aes(x = 西元年月, y = `定存利率-一個月-固定`)
) +
geom_line(
aes(x = 西元年月, y = `定存利率-三個月-固定`),
color = "blue"
) +
geom_line(
aes(x = 西元年月, y = `定存利率-一年期-固定`),
color = "green"
) +
geom_line(
aes(x = 西元年月, y = `定存利率-二年期-固定`),
color = "brown"
) +
geom_line(
aes(x = 西元年月, y = `定存利率-三年期-固定`),
color = "red"
)
}4.3.7 Labels and theme
加上labels和classic theme
# <<ggTwbInterestRates>>
ggTwbInterestRates= {
ggline2Y3Y +
labs(
title="臺灣銀行不同期限定存利率",
subtitle="固定利率,單位:% 年率",
caption="資料出處: 政府開放資料平台https://data.gov.tw/dataset/10359",
y="",
x=""
)+theme_classic()
}換掉theme
ggTwbInterestRates_bw= {
ggTwbInterestRates +
theme_bw()
}4.4 圖形存檔
saveGgline = {
ggsave(
ggTwbInterestRates,
file=file.path(
root(),"img/ggTwbInterestRates.svg"
), width=8, height=5)
}4.5 後製
openSVG
svgOpen(
file.path(
root(), "img/ggTwbInterestRates.svg"
)
)4.6 文章寫作
範例文件:https://www.dropbox.com/s/kctvb7ltggkg6ca/myResearchPaper.zip?dl=0
drake_myResearchPaper.Rmd: 定義drake plan的Rmd, 它可以生成plan_drake_myResearchPaper.R
plan_drake_myResearchPaper.R:
source()後會生成以四個物件:- plan_drake_myResearchPaper
- mk_plan_drake_myResearchPaper
- vis_plan_drake_myResearchPaper
- load_drake_myResearchPaper: 用來提取drake cache中已存在的target放到global environment
myResearchPaper.Rmd: 正式的文章寫作Rmd. drake_myResearchPaper.Rmd中的makecondition可能也需要放到裡面。
步驟1
針對drake_xxx.Rmd檔
步驟2
針對myResearchPaper.Rmd設定setup chunk
```{r setup, include=FALSE}
## 你的makecondition
## 產生可讀取drake_cache的loaddd函數
source("plan_drake_xxx.R")
loaddd <- load_plan_drake_xxx
```
需要target時,使用
```{r}
loaddd(targetK)
targetK
```
按knitr產生文章成品。
步驟3(optional)
在drake_xxx.Rmd 增加以下target
```{r report}
report = rmarkdown::render(
knitr_in(".../myResearchPaper.Rmd"),
output_file = file_out(".../myResearchPaper.html"),
quiet = TRUE
)
```
target={command}當command只有一行指令時,可以不寫{}
