每一幅圖形一定擁有兩個位置標度,一個指定水平位置(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 參數,允許指定若干種線性或非線性的變換。
名稱 | 變換函數 | 逆變換函數 |
---|---|---|
asn | ||
exp | ||
identity | ||
log | ||
log10 | $ 10^y$ | |
log2 | ||
logit | ||
pow10 | $10^x $ | |
probit | ||
recip | $ x^{-1}$ | $ y^{-1}$ |
reverse | ||
sqrt | $ x^{\frac{1}{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/