lauren-mancke-60627-unsplash
 程式與統計資料視覺化

dual y-axis plotting 雙Y軸 繪圖 | R 資料視覺化 Data Visualization 小技巧

很多時候在比較不同單位的資料走勢時,比如說身高v.s.體重或氣溫v.s.降雨量,會需要雙Y軸(dual y-axis)來繪製,除了有效標記不同資料單位區間大小,並能將兩資料的Y位置等比例壓縮成等高的Y軸區間以利比較。本篇學習筆記將比較ggplot2()與plot()繪製雙y軸(dual y-axis)方法優劣。

dual y-axis plotting 雙Y軸 繪圖

step 1: data preparation

我們使用中央氣象局的台北月平均氣溫與降雨量統計資料

我們直接將台北月平均氣溫與降雨量的查詢結果複製到剪貼簿,並使用read.table(pipe(“pbpaste))的方式讀取。

(*此法為mac系統的剪貼簿,如果為window系統剪貼簿,則改為“clipboard”)

接著將月份時間資訊、氣溫與降雨量三個向量合併成data frame。

摘要氣溫與降雨量敘述統計。

step 2: plotting using ggplot2()

先畫出月份氣溫變化圖。

dual y-axis 雙Y軸

加上第二座標軸。

  • 使用scale_y_axis(name = …, limits= …)調整主要Y標軸的命名(name)與區間。
  • 使用scale_y_axis(sec.axis = sec_axis())加上第二Y軸,調整降雨單位與命名第二Y軸名稱。

dual y-axis 雙Y軸

調整色彩與主題外觀。

  • geom_bar(): 使用colour, fill 來調整長條圖的線條與填充色彩。
  • geom_point(): 使用size, shape, fill 來調整點的大小、形狀與填充色彩。
  • 使用主題圖層theme_bw()。
  • 使用theme()中的panel.grid.major, panel.grid.minor參數將繪圖面板背景的主要次要隔線拿掉。

dual y-axis 雙Y軸




調整x軸月份時間標示方式。

  • 載入專門處理時間的lubridate套件。我們將使用套件中的month()函數回傳日期的月份並轉換成月份名稱。

dual y-axis 雙Y軸

即完成使用ggplot2繪製的雙Y軸(dual y-axis)圖表。

step 3: plotting using plot() & barplot() & axis

我們另外使用非ggplot2套件的方法來處理雙Y軸(dual y-axis)繪圖問題。

首先,我們先畫出每月氣溫變化曲線。

  • 使用par(mar = c(bottom, left, top, right)) 來調整繪圖區邊界寬度。
  • plot()中,使用type參數來調整

dual y-axis 雙Y軸

接著,我們就現有圖層上,再加上新圖層barplot(),使用par(new = TRUE)。

  • 因為是疊加上去的,為了避免重複的x軸和y軸,我們使用參數xaxt = ‘n’, yaxt = ‘n’將barplot()的x,y軸關閉。

dual y-axis 雙Y軸

加上右邊y軸的資訊。

  • 我們使用axis(side = …)來指定座標軸位置。1=below, 2=left, 3=above and 4=right

dual y-axis 雙Y軸

接著使用mtext()標上右邊座標軸的名稱。

dual y-axis 雙Y軸

最後加上曲線跟長條圖的圖示說明方框於左上角。

dual y-axis 雙Y軸

即完成。這邊的好處是,左右兩側Y軸不需特別調整單位縮放問題,即可壓縮在標準化後的等長區間但缺點是,曲線和長條圖在X軸上沒能對齊




step 4 : using beaver1 & beaver2 data plotting double lines with dual y-axis

我們試用另外一組資料(海狸體溫資料: beaver1, beaver2)示範,如何使用plot() + axis()來繪製雙Y軸的兩條曲線。(因為都是曲線,就沒有對齊問題,適用於比較曲線圖

載入海狸1和海狸2的體溫資料

先畫出第一隻海狸的體溫。

dual y-axis 雙Y軸

再畫出第二隻海狸的體溫。因為是要加在前一張圖層,故我們使用par(new = TRUE)。

dual y-axis 雙Y軸

我們來新增第二個y軸並加上新y軸名稱,並條整兩條數列外觀與整體圖表主題。

dual y-axis 雙Y軸

為了確認兩條曲線上每一點是否對齊,我們可以調整曲線樣式(並同時調整圖例說明)。

dual y-axis 雙Y軸

由上圖可發現,當兩筆資料都為曲線資料,即可在x軸對齊的基礎下使用雙Y軸比較走勢


更多資料視覺化學習筆記:

ggplot2 | 簡易資料視覺化 Basic Data Visualization – part1 | using R SQLite

Summarize Categorical Variables | 類別變數摘要 | 統計 R語言


參考連結:

  1. 歐萊禮  R資料科學
  2. ggplot2: Secondary Y axis
  3. 2 Y-AXIS PLOTTING