ggplot2學習筆記之位置標度

每一幅圖形一定擁有兩個位置標度,一個指定水平位置(x 標度),另一個是指定豎直標度(y 標度)。ggplot2 提供了連續性、離散型(針對因子型、字符型、邏輯向量)、以及日期型。
對所有的位置座標來說,修改座標軸範圍是一項常見任務,使用輔助函數xlim()和ylim()可以減輕我們工作量。比如:

  • xlim(10,20):從10 到20 的連續型標度;
  • xlim(”a”, “b”, “c”):離散型標度;
  • xlim(as.Date(c(“2008-05-01”, “2008-08-01”))):從2008-05-01 到2008-08-01 的日期型標度。

##連續型:
常見的連續型位置標度有scale_x_continuous、scale_y_continuous,它們均是將數據映射到x 軸和y 軸。而最有趣的變式是通過變換來生成的,每一個連續型標度都可以接受一個trans 參數,允許指定若干種線性或非線性的變換。

名稱 變換函數f(x)f(x) 逆變換函數f1(x)f^{-1}(x)
asn tanh1(x)tanh^{-1}(x) tanh(y)tanh(y)
exp exe^x log(y)log(y)
identity xx yy
log log(x)log(x) eye^y
log10 log10(x)log_{10}(x) $ 10^y$
log2 log2(x)log_2(x) 2y2^y
logit log(x1x)log(\frac{x}{1-x}) 11+e(y)\frac{1}{1+e(y)}
pow10 $10^x $ log10(y)log10(y)
probit Ф(x)Ф(x) Ф1(y)Ф^{-1}(y)
recip $ x^{-1}$ $ y^{-1}$
reverse x-x y-y
sqrt $ x^{\frac{1}{2}}$ y2y^2

對於連續型位置標度,變換有簡寫形式,比如scale_x_continuous(trans = “log10”)可以簡寫爲scale_x_log10()。參數trans 對任意連續型標度均有效,但只有位置標度有簡寫形式。
當然,可以直接對變量進行變換,而不使用標度變換。比如,直接使用函數log10(x),而不是scale_x_log10(),繪圖區域是完全一樣的,但座標軸和標籤是不一樣的。

set.seed(1410)
dsmall <- diamonds[sample(nrow(diamonds), 100), ]
qplot(data=dsmall,carat,price) + scale_x_log10() + scale_y_log10()
qplot(data=dsmall,log10(carat),log10(price))

這裏寫圖片描述


##日期與時間:
日期與時間值基本屬於連續型,但在標註座標軸時有着特殊的處理方式。目前僅支持date 類日期值、POSIXct 類時間值。如果日期與時間是其他格式的,則需用 as.Date()或as.POSIXct()對其進行轉換。
對於日期座標軸,有三個參數可以控制其外觀與刻度位置:major、minor、format。參數細節如下:

  • 參數 major 和 minor 用以按照時間的單位,即年(year)、月(month)、周(week)、日(day)、時(hour)、分(minute)、秒(second)來指定主要和次要斷點的位置,並且允許以這些單位的倍數出現。例如:major=”2 weeks”將在每隔兩週的位置放置一個主刻度。如果未指定,日期標度可以自動選擇合適的默認值;
  • 參數format 指定了刻度標籤的格式。以下表列出了用於展現日期各個組成部分的特殊字符。例如,字符串“%Y-%m-%d”表示以“年-月-日”的格式顯示日期。
編碼 含義
%S 秒(00-59)
%M 分鐘(00-59)
%l 小時,12 小時制(1-12)
%I 小時,12 小時制(01-12)
%H 小時,24 小時制(00-23)
%a 縮寫的周幾(Mon-Sun)
%A 全稱的周幾(Monday-Sunday)
%e 某月中的某天(1-31)
%d 某月中的某天(01-31)
%m 以數值表示的月份(01-12)
%b 縮寫的月份(Jan-Dec)
%B 全稱的月份(January-December)
%y 不含世紀的年份(00-99)
%Y 含世紀的年份(0000-9999)

library(scales)
p <- qplot(date,psavert,data=economics,geom='line') + ylab('Personal savings rate') +
geom_hline(xintercept=0,colour='grey50')
p
p + scale_x_date(breaks=date_breaks("5 years"))
p + scale_x_date(breaks=date_breaks("5 years"),minor_breaks='1 years')
p + scale_x_date(breaks=date_breaks("5 years"),labels=date_format('%Y'))

這裏寫圖片描述
這裏寫圖片描述
在左上圖中,使用的默認標度;右上圖,使用參數breaks=date_breaks(“5 years”)指定每隔5 年顯示一個刻度值;在左下圖中,參數minor_breaks=‘1 years’是設定座標軸顯示最小刻度(即每一個刻度代表一年);在右下圖中,參數labels=date_format(’%Y’)是指定刻度標籤格式。


##離散型:
離散型位置標度將輸入中的各個水平映射爲整數。結果的順序可用參數breaks 進行控制,不想要的水平可以使用limits(或xlim、ylim)進行丟棄。由於我們經常也會在圖形的非整點位置放置標籤和標註,所以離散型位置標度也可以接受連續型的值。如果你尚未調整breaks 或limits,某個因子水平的所在位置的數值表示可以使用as.numeric()進行計算:以從1 開始的整數表示。

歡迎訪問我的個人站點:http://bgods.cn/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章