Chapter 7 Annotation

Line

這裡是指畫過整個圖面的線。

  • 垂直線:geom_vline(xintercept,…)

  • 水平線:geom_hline(yintercept,…)

  • 自定斜率:geom_abline(slope,intercept,…)

Others

  • annotate(geom,…)

其中geom為字串,說明要什麼樣的標示,而…為針對該geom所需的完整設計定義。

  • 文字:“text”, x, y, label

  • 區塊陰影:“rect”, xmin, xmax, ymin, ymax

  • 線段:“segment”, x, xend, y, yend

    與前述的geom_vline, _hline, _abline不同,它可自訂線段長短。

  • “pointrange”

Annotation reference

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

7.1 Line

  • geom_vline(xintercept,…)

  • geom_hline(yintercept,…)

  • geom_abline(slope,intercept,…)

由於它背後是用geom_line去畫,所以geom_line可以用的aesthetics這裡都可以用。

7.1.1 geom_vline/geom_hline

p <- ggplot(mtcars, aes(wt, mpg)) + geom_point()

# Fixed values
p + geom_vline(xintercept = 5)

p + geom_vline(xintercept = 1:5)

7.1.2 geom_abline

  • geom_abline(intercept=0,slope=1)

ab means a and b in the syntax of a line: y=a+bx.

p + geom_abline(intercept = 15,slope=5)

7.2 Text: 文字

p + annotate("text", x = 2:5, y = 25, label = "Some text")

7.3 Rect: 區塊

p + annotate("rect", xmin = 3, xmax = 4.2, ymin = 12, ymax = 21,
  alpha = .2)

7.4 Segment:

p + annotate("segment", x = 2.5, xend = 4, y = 15, yend = 25,
  colour = "blue")

p + annotate("segment",
               x=c(2.5,3.5),y=c(9,9),
               xend=c(2.5,3.5),yend=c(11,11))+
  scale_y_continuous(
    limits = c(10,35),
    expand = c(0,0))

7.5 練習

同前一章,依

設計我國與主要貿易對手通貨對美元匯率自2017年開始的走勢圖

我國與主要貿易對手通貨對美元之匯率

執行以下程式引入資料:

library(lubridate)
library(dplyr)
library(tidyr)
library(readr)
# 引入資料
exData <- read_csv("https://quality.data.gov.tw/dq_download_csv.php?nid=6563&md5_url=9f65bdb6752389dc713acc27e93c1c38")

# 處理時間
exData$期間 %>% paste0("-01") %>% ymd() -> exData$期間

# 處理資料結構
exData %>% select(期間, "歐元USD/EUR","韓元KRW/USD","人民幣CNY/USD", "日圓JPY/USD", "新台幣NTD/USD") -> exData2

exData2 %>% gather(幣別, 匯率, -期間) -> exData2

# 處理變數class
exData2$幣別 %>% as.factor() -> exData2$幣別
exData2$匯率 %>% as.numeric() -> exData2$匯率

# 處理歐元
exData2$匯率[exData2$幣別=="歐元USD/EUR"]<-1/exData2$匯率[exData2$幣別=="歐元USD/EUR"]

# 以2017年1月為基期
exData2 %>% group_by(幣別) %>%
  mutate(匯率=匯率/匯率[期間==ymd("2017-01-01")]*100) %>% 
  ungroup() ->
  exData3

levels(exData3$幣別)[4]<-"歐元EUR/USD"

執行以下程式完成基圖:

library(ggplot2)
p <- exData3 %>% 
  filter(期間>=ymd("2017-01-01")) %>% 
  ggplot()+
  geom_line(aes(x=期間,y=匯率,color=幣別))
p 

可透過+guides(...)來設定不同aes mapping的圖例。

範例 將color mapping的圖例取消。

p+guides(color="none")