Scales, Axes and Legends
6.1 簡介標(biāo)度(scale)是將數(shù)據(jù)的取值映射到圖形空間,例如顏色,、大小和形狀表示不同的數(shù)值,。展現(xiàn)標(biāo)度的常見做法是繪制圖例和坐標(biāo)軸。 每一種標(biāo)度都是從數(shù)據(jù)空間的某個區(qū)域(標(biāo)度的定義域)到圖層屬性空間的某個值域(標(biāo)度的值域)的一個函數(shù),。標(biāo)度的定義域提供給這個標(biāo)度的變量的取值范圍,。 定義域(變量)可以是連續(xù)型、離散型,、有序或者無序型,。值域則包括我們可以感知的圖形屬性(顏色、形狀,、大小,、線條等等) 執(zhí)行標(biāo)度的過程分為 變換 訓(xùn)練 映射
標(biāo)度可以粗略地分為四個類別: 位置標(biāo)度 顏色標(biāo)度 手動離散型標(biāo)度 同一型標(biāo)度
6.2 修改標(biāo)度實際上每個圖片生成的命令都有默認(rèn)的標(biāo)度,比如這個簡單的代碼: ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(colour = class))
實際上它背后的標(biāo)度是這樣的: ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(colour = class)) +
scale_x_continuous() +
scale_y_continuous() +
scale_colour_discrete()
如果你想修改x軸y軸的名字: ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(colour = class)) +
scale_x_continuous('A really awesome x axis ') +
scale_y_continuous('An amazingly great y axis ')
如果你想修改顏色: ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(colour = class)) +
scale_x_sqrt() +
scale_colour_brewer()
從上面幾個例子可以看出來,, scale 的“命名方案”是在后面添加下劃線 _ ,,然后添加要修改的相應(yīng)對象和屬性,下表有一個簡單的總結(jié) (截圖來自《ggplot2(第一版)》) 6.3 引導(dǎo)元素:圖例和坐標(biāo)軸(Guide:Legends and Axes) 什么是引導(dǎo)元素(guide)引導(dǎo)元素:生成一個允許讀圖者從圖形屬性空間到數(shù)據(jù)空間進(jìn)行反向映射的引導(dǎo)元素,,從而從圖中讀取數(shù)值 6.3.1 標(biāo)度名稱下面我們創(chuàng)建一個簡單的數(shù)據(jù)框 df <> data.frame(x = 1:2, y = 1, z = 'a')
兩種修改橫坐標(biāo)名稱的代碼,,首先是簡單的命名為 'X axis' : p <> ggplot(df, aes(x, y)) + geom_point()
p + scale_x_continuous('X axis')
另外一種使用了 quote() : p + scale_x_continuous(quote(a + mathematical ? expression))
## `^`后面的字符轉(zhuǎn)換為上標(biāo)形式
當(dāng)修改坐標(biāo)軸名稱,、圖例名稱時,有一個相對簡單的方法,,就是使用 xlab() ,, ylab() , labs() 三種函數(shù): 例如 xlab() ,, ylab() 可以用來更改x軸和y軸的名稱:
df <> data.frame(x = 1:2, y = 1, z = 'a')
p <> ggplot(df, aes(x, y)) + geom_point(aes(colour = z))
p + xlab('X axis') + ylab('Y axis')
如果要將圖例名稱也更改,,就直接用 labs() : p <> ggplot(df, aes(x, y)) + geom_point(aes(colour = z))
p + labs(x = 'X axis', y = 'Y axis', colour = 'Colour\nlegend')
## 用'\n'換行
如果想去掉坐標(biāo)軸名稱: p + labs(x = '', y = '')
p + labs(x = NULL, y = NULL)
6.3.2 位置標(biāo)度和標(biāo)簽(Breaks and Labels)breaks 控制坐標(biāo)軸上刻度線的單位間隔。每個 breaks 都有一個對應(yīng)的標(biāo)簽 labels ,。
下面從幾個例子中說明: 創(chuàng)建一個數(shù)據(jù)集,,我們來更改x軸單位時間間隔:
df <> data.frame(x = c(1, 3, 5) * 1000, y = 1)
axs <> ggplot(df, aes(x, y)) +
geom_point() +
labs(x = NULL, y = NULL)
## 不更改設(shè)置
axs
## 添加breaks,,設(shè)置x軸單位間隔
axs + scale_x_continuous(breaks = c(2000, 4000))
## 添加labels
axs + scale_x_continuous(breaks = c(2000, 4000), labels = c('2k', '4k'))
下面的例子標(biāo)度是除x軸和y軸之外的顏色:
df <> data.frame(x = c(1, 3, 5) * 1000, y = 1)
leg <> ggplot(df, aes(y, x, fill = x)) +
geom_tile() +
labs(x = NULL, y = NULL)
## 不更改設(shè)置
leg
## 添加breaks修改標(biāo)度
leg + scale_fill_continuous(breaks = c(2000, 4000))
## 添加labels修改標(biāo)度
leg + scale_fill_continuous(breaks = c(2000, 4000), labels = c('2k', '4k'))
修改離散型分類標(biāo)簽
在這個例子中,我們想更改y軸上各個點(diǎn)的標(biāo)簽: df2 <> data.frame(x = 1:3, y = c('a', 'b', 'c'))
ggplot(df2, aes(x, y)) +
geom_point()
ggplot(df2, aes(x, y)) +
geom_point() +
scale_y_discrete(labels = c(a = 'apple', b = 'banana', c = 'carrot'))
去掉x軸的間隔和去掉標(biāo)簽名稱
axs + scale_x_continuous(breaks = NULL)
axs + scale_x_continuous(labels = NULL)
去掉填充色框和去掉色框的顏色標(biāo)度
leg + scale_fill_continuous(breaks = NULL)
leg + scale_fill_continuous(labels = NULL)
6.4 圖例和坐標(biāo)軸相比,,圖例(Legends)的變化更加多樣 6.4.1 圖層和圖例的結(jié)合圖例可以有多個圖層,。 show.legend 參數(shù)是設(shè)置是否顯示在圖例中,在默認(rèn)狀態(tài)下,,設(shè)定值是為 FALSE ,,意思是不顯示;
如下例: df <> data.frame(x = 1, y = c(1,2,3), z = c('a', 'b', 'c'))
ggplot(df, aes(y, y)) +
geom_point(size = 4, colour = 'grey20') +
geom_point(aes(colour = z), size = 2)
當(dāng) show.legend=TRUE ,,就是這個圖層也顯示在圖例中: ggplot(df, aes(y, y)) +
geom_point(size = 4, colour = 'grey20', show.legend = TRUE) +
geom_point(aes(colour = z), size = 2)
當(dāng)你設(shè)置透明度來處理重疊繪圖時,,你可能希望圖例和圖中圖形對象的不完全一樣,比如: ## 創(chuàng)建數(shù)據(jù)框,,產(chǎn)生1000個服從正態(tài)分布的隨機(jī)數(shù)
norm <> data.frame(x = rnorm(1000), y = rnorm(1000))
## 設(shè)置z,,整個數(shù)據(jù)框取子集分成三個部分
norm$z <> cut(norm$x, 3, labels = c('a', 'b', 'c'))
## 只在函數(shù)中設(shè)置透明度參數(shù),圖例透明度默認(rèn)為0.1
ggplot(norm, aes(x, y)) +
geom_point(aes(colour = z), alpha = 0.1)
使用 guides() 函數(shù),,設(shè)置 guide_legend() 中的覆蓋映射 override.aes : ## list中透明度是1
ggplot(norm, aes(x, y)) +
geom_point(aes(colour = z), alpha = 0.1) +
guides(colour = guide_legend(override.aes = list(alpha = 1)))
除此之外,,我們還可以設(shè)置,散點(diǎn)中點(diǎn)的形狀: ggplot(df, aes(x, y)) + geom_point(aes(colour = z))
ggplot(df, aes(x, y)) + geom_point(aes(shape = z))
ggplot(df, aes(x, y)) + geom_point(aes(shape = z, colour = z))
6.4.2 圖例的位置這部分講的是把圖例放哪兒 決定放哪兒的參數(shù)是: theme() 中的 legend.position 默認(rèn)狀態(tài)是 theme(legend.position='right') 然后我們可以通過“right”, “l(fā)eft”, “top”, “bottom”,,把他放在上/下/左,,或者去掉“none”,例如: df <> data.frame(x = 1:3, y = 1:3, z = c('a', 'b', 'c'))
base <> ggplot(df, aes(x, y)) +
geom_point(aes(colour = z), size = 3) +
xlab(NULL) +
ylab(NULL)
base + theme(legend.position = 'right') # the default
base + theme(legend.position = 'bottom')
base + theme(legend.position = 'none')
此外,,可以通過設(shè)置坐標(biāo)點(diǎn),,指定圖例的位置: df <> data.frame(x = 1:3, y = 1:3, z = c('a', 'b', 'c'))
base <> ggplot(df, aes(x, y)) +
geom_point(aes(colour = z), size = 3)
base + theme(legend.position = c(0, 1), legend.justification = c(0, 1))
6.4.3 Guide函數(shù)guide 是引導(dǎo)元素。
guide() 函數(shù)可以提供很多額外的功能,,比如 guide_colourbar() (用于連續(xù)型變量),; guide_legend() (連續(xù)型或離散型變量均可)
用法如下例: df <> data.frame(x = 1, y = 1:3, z = 1:3)
base <> ggplot(df, aes(x, y)) + geom_raster(aes(fill = z))
base
下面對圖例部分的顏色填充加以設(shè)置: base + scale_fill_continuous(guide = guide_legend())
換成 guide() 函數(shù)的寫法,效果是一樣的: base + guides(fill = guide_legend())
這些函數(shù)可以調(diào)整圖例中的各種細(xì)節(jié),。 可以通過 ncol ,, byrow 調(diào)整圖例的各種排列 df <> data.frame(x = 1, y = 1:4, z = letters[1:4])
# Base plot
p <> ggplot(df, aes(x, y)) + geom_raster(aes(fill = z))
p
p + guides(fill = guide_legend(ncol = 2))
p + guides(fill = guide_legend(ncol = 2, byrow = TRUE))
可以通過 reverse 調(diào)整圖例方向 df <> data.frame(x = 1, y = 1:4, z = letters[1:4])
p <> ggplot(df, aes(1, y)) + geom_bar(stat = 'identity', aes(fill = z))
p
p + guides(fill = guide_legend(reverse = TRUE))
還有上文提過的 override.aes 改變圖例圖形屬性 這個參數(shù)只能設(shè)定連續(xù)型變量。 只能設(shè)置成顏色漸變型的條形圖例,。 舉個栗子就明白了: df <> data.frame(x = 1, y = 1:4, z = 4:1)
p <> ggplot(df, aes(x, y)) + geom_tile(aes(fill = z))
p
p + guides(fill = guide_colorbar(reverse = TRUE))
p + guides(fill = guide_colorbar(barheight = unit(4, 'cm')))
6.5 限制范圍(limits)圖表上坐標(biāo)軸的范圍往往來自于數(shù)據(jù)的范圍,,這是默認(rèn)生成的。但有時候我們想修改這個范圍,,或擴(kuò)大或縮小,,使數(shù)據(jù)涵蓋面更廣,或更集中更突出 這時,,我們可以使用 limits 參數(shù): 對于連續(xù)型變量:應(yīng)當(dāng)設(shè)置為一個數(shù)字向量;如果只想設(shè)置一個上限或者下限,,那就設(shè)置另一個值為NA 對于離散型變量:就要設(shè)置字符向量,;列出所有的數(shù)據(jù)點(diǎn)
df <> data.frame(x = 1:3, y = 1:3)
base <> ggplot(df, aes(x, y)) + geom_point()
## 直接查看圖表
base
## 查看其中一個區(qū)間,,系統(tǒng)會提示你丟失了兩個數(shù)據(jù)點(diǎn)
base + scale_x_continuous(limits = c(1.5, 2.5))
#> Warning: Removed 2 rows containing missing values (geom_point).
## 通過標(biāo)度設(shè)置x軸的范圍
base + scale_x_continuous(limits = c(0, 4))
為了簡化上述命令,ggplot2包中提供了一些簡化的命令,,如,, xlim() , ylim() and lims() 我們可以作如下設(shè)置: xlim(10,20) :設(shè)置x軸10-20連續(xù)的范圍
ylim(20,10) :設(shè)置y軸20-10連續(xù)的范圍
xlim('a','b','c') :設(shè)置x軸三個離散的字符點(diǎn)
xlim(as.Date(c('2008-05-01','2008-08-01'))) :設(shè)置x軸為日期
實際上,圖表上的x,、y軸范圍比我們設(shè)置的要稍稍大一點(diǎn),。這是系統(tǒng)自動生成的,為了數(shù)據(jù)點(diǎn)不會出現(xiàn)在軸上,。 如果想修改這一點(diǎn),,可以設(shè)置 expand=c(0,0) ggplot(faithfuld, aes(waiting, eruptions)) +
geom_raster(aes(fill = density)) +
theme(legend.position = 'none')
ggplot(faithfuld, aes(waiting, eruptions)) +
geom_raster(aes(fill = density)) +
scale_x_continuous(expand = c(0,0)) +
scale_y_continuous(expand = c(0,0)) +
theme(legend.position = 'none')
6.6 標(biāo)度工具箱(Scales Toolbox)除了調(diào)整標(biāo)度的默認(rèn)選項之外,你也可以重新創(chuàng)建新的標(biāo)度,,主要分為以下四類: 連續(xù)型位置標(biāo)度:用于將整數(shù),、數(shù)值、日期/時間數(shù)據(jù)映射到x軸或者y軸的位置上,; 顏色標(biāo)度:用于將連續(xù)型或離散型變量映射到顏色,; 手動離散型標(biāo)度:將離散型變量映射到你選擇的大小、形狀,、顏色,、線條等; 同一型標(biāo)度:當(dāng)你的數(shù)據(jù)能被R中的繪圖函數(shù)理解時,,數(shù)據(jù)空間和圖形屬性空間相同時,,可以使用同一型標(biāo)度,此時默認(rèn)不繪制圖例的
下面我們四種圖例詳細(xì)說明: 1. 連續(xù)型位置標(biāo)度(Continuous Position Scales)每個圖表都有兩個位置標(biāo)度,,即x和y,。因此,最常見的連續(xù)型位置標(biāo)度就是 scale_x_continuous() 和 scale_y_continuous() ,,它們可以將數(shù)據(jù)映射到x軸和y軸,。 每個連續(xù)型標(biāo)度都可以接受一個 trans 參數(shù),允許指定若干種顯性或非線性變換,。每一種變換都是由所謂的變換器(“transformer”)實現(xiàn)的,。下表是比較常用的變換器: (截圖選自《ggplot2(第一版)》) 注意:在最近更新的第二版ggplot2中,表中的倒數(shù)命令(recip)已經(jīng)改為(reciprocal),,其他未更新,。
如下例,將y軸轉(zhuǎn)換為倒數(shù)(reciprocal): ggplot(mpg, aes(displ, hwy)) +
geom_point() +
scale_y_continuous(trans = 'reciprocal')
將x軸/y軸數(shù)值轉(zhuǎn)化成log10: ggplot(diamonds, aes(price, carat)) +
geom_bin2d() +
scale_x_continuous(trans = 'log10') +
scale_y_continuous(trans = 'log10')
其中有一些參數(shù)有簡寫形式,,如,, scale_x_log10() 、 scale_x_sqrt() ,、 scale_x_reverse() 另外,,變換器同樣可以用于 coord_trans() 中,,此時變換將在統(tǒng)計量計算完成后進(jìn)行,詳見第七章 日期和時間值基本上屬于連續(xù)型,,但在標(biāo)注坐標(biāo)軸時處理方式稍有不同,。我們使用 Date 和 POSIXct 類的時間值。如果是其他格式的,,則應(yīng)當(dāng)使用 as.Date 和 as.POSIXct 進(jìn)行轉(zhuǎn)換,。 scale_x_date() 和 scale_x_datetime() 的用法和 scale_x_continous 用法相似。
date_breaks() 和 date_labels() 的用法稍有不同:
date_breaks() 和 date_minor_breaks() :可以設(shè)置日期間隔(年,、月,、星期、日,、小時,、每分、每秒)作為斷點(diǎn),,,;例如 date_breaks='2 weeks'
date_labels() :通過 strptime() 和 format() 指定特殊格式,如下表
例如,,如果你想以 14/10/1979 的形式顯示日期,,可以使用字符串 %d/%m/%y 。 再舉個栗子,,經(jīng)濟(jì)數(shù)據(jù)集(時間序列)中,,橫軸日期的不同表示方式: base <> ggplot(economics, aes(date, psavert)) +
geom_line(na.rm = TRUE) +
labs(x = NULL, y = NULL)
base # 默認(rèn)間隔和時間表示方式
base + scale_x_date(date_labels = '%y', date_breaks = '5 years')
取其中一小段時間 ('2004-01-01'-'2005-01-01') ,按1個月為間隔: base + scale_x_date(
limits = as.Date(c('2004-01-01', '2005-01-01')),
date_labels = '%b %y',
date_minor_breaks = '1 month'
)
取其中一小段時間 ('2004-01-01'-'2004-06-01') ,,兩個星期為間隔: base + scale_x_date(
limits = as.Date(c('2004-01-01', '2004-06-01')),
date_labels = '%m/%d',
date_minor_breaks = '2 weeks'
)
2. 顏色標(biāo)度除了位置之外,,顏色是最常用的圖形屬性。有很多方法可以將“值”映射成顏色 在最新的版本里,,對于連續(xù)型變量,,有四種基于漸變設(shè)置顏色的標(biāo)度; 對于離散型變量,,也有四種設(shè)置顏色的標(biāo)度 這里作者講了一部分關(guān)于色彩學(xué)的基礎(chǔ)理論,。顏色是由不同波長的光混合而成的,人類的眼球有三種不同顏色的感受器,,所以我們使用三個數(shù)字來表示任意顏色,,就是rgb編碼,這個色彩空間使用紅綠藍(lán)三種光強(qiáng)表示一種顏色,,但是它在視覺上的感知并不均勻,,由于色彩空間中位置不同,兩種間隔一個單位的顏色可以非常相似也可能非常不同,,這使得創(chuàng)建連續(xù)變量到一個顏色集的映射變得十分困難,。
在ggplot2中,,使用了一種名為HCL色彩空間(Hue-Chroma-Luminance)的現(xiàn)代方案,由三個部分構(gòu)成,,分別是色相(hue)、彩度(chroma)以及明度(luminance) 色相:是一個從0到360的角度值,,將一種色彩賦予顏色屬性(如紅橙黃藍(lán)等等) 明度:顏色的明暗程度,,即看其接近黑色或白色的程度,明度0是黑色,,1是白色,。 彩度:色彩的純度。0是灰色,,彩度的最大值隨明度變化而不同
下圖是這個色彩空間的三維形狀,,每個分面中明度是一個常數(shù),色相被映射成一個角度,,彩度被映射成半徑,,可以看到每個分面的中心都是灰色的,離邊緣越近顏色越濃烈: Wikipedia上的HCL色彩空間長這樣 ↓↓↓ 連續(xù)型在最新版本的ggplot2中,,根據(jù)顏色梯度中的色彩數(shù)量劃分,,有四類連續(xù)性顏色梯度 雙色梯度 —— scale_colour_gradient() 或 scale_fill_gradient() :順序為從低到高,使用 low 和 high 兩個參數(shù)控制此梯度兩端的顏色
舉例,,使用faithfuld數(shù)據(jù)集(黃石公園老忠實泉兩次爆發(fā)的間隔時間和每次噴發(fā)的時長)做光柵圖(Raster),,顏色標(biāo)度為默認(rèn)值時: erupt <> ggplot(faithfuld, aes(waiting, eruptions, fill = density)) +
geom_raster() +
scale_x_continuous(NULL, expand = c(0, 0)) +
scale_y_continuous(NULL, expand = c(0, 0)) +
theme(legend.position = 'none')
## 不修改顏色標(biāo)度
erupt
修改顏色標(biāo)度: ## 黑白漸變
erupt + scale_fill_gradient(low = 'white', high = 'black')
## 其他顏色漸變
erupt + scale_fill_gradient(
low = munsell::mnsl('5G 9/2'),
high = munsell::mnsl('5G 6/8')
)
三色梯度漸變 —— scale_colour_gradient2() 或 scale_fill_gradient2() :和雙色漸變類似,順序為低-中-高,。中點(diǎn)的默認(rèn)值是0,,但是可以使用參數(shù) midpoint 加以設(shè)置為任意值。著多個參數(shù)對于形成發(fā)散型(diverging)配色方案非常有用,。
## 提取faithfuld數(shù)據(jù)集中density變量的中間值,,將其賦予mid
mid <> median(faithfuld$density)
## 把mid設(shè)置為顏色區(qū)段的中間值
erupt + scale_fill_gradient2(midpoint = mid)
自定義n色梯度—— scale_colour_gradientn() 或 scale_fill_gradientn() :此標(biāo)度需要賦予參數(shù) colours 一個顏色向量。這對于有特殊意義的數(shù)據(jù)(比如表現(xiàn)地形等)很有用,。
其中可以使用另一個包 colorspace ,,和調(diào)色盤類似的意思 erupt + scale_fill_gradientn(colours = terrain.colors(7))
erupt + scale_fill_gradientn(colours = colorspace::heat_hcl(7))
erupt + scale_fill_gradientn(colours = colorspace::diverge_hcl(7))
使用ColorBrewer配色方案—— scale_color_distiller() 和 scale_fill_gradient() :可以通過設(shè)置 palette 參數(shù)調(diào)整顏色
erupt + scale_fill_distiller()
erupt + scale_fill_distiller(palette = 'RdPu')
erupt + scale_fill_distiller(palette = 'YlOrBr')
當(dāng)數(shù)據(jù)集中包含缺失值NA時,可以通過改變 na.value 參數(shù),,默認(rèn)狀態(tài)下是灰色,,可以通過更改設(shè)置改變?nèi)笔е档念伾?/p> 如下例,設(shè)置一個文本框,,z變量中含有一個缺失值,,將z變量映射為顏色圖形屬性: df <> data.frame(x = 1, y = 1:5, z = c(1, 3, 2, NA, 5))
p <> ggplot(df, aes(x, y)) + geom_tile(aes(fill = z), size = 5)
p
# 不顯示缺失值
p + scale_fill_gradient(na.value = NA)
# 突出缺失值
p + scale_fill_gradient(low = 'black', high = 'white', na.value = 'red')
離散型離散數(shù)據(jù)有四種顏色標(biāo)度。我們使用最基本的條形圖來舉例,。 首先是默認(rèn)的配色方案: df <> data.frame(x = c('a', 'b', 'c', 'd'), y = c(3, 4, 1, 2))
bars <> ggplot(df, aes(x, y, fill = x)) +
geom_bar(stat = 'identity') +
labs(x = NULL, y = NULL) +
theme(legend.position = 'none')
bars
使用 scale_colour_hue() 或 scale_fill_hue() 函數(shù)來修改配色,,它的意思是沿著HCL色輪選取均勻分布的色相來自動生成:
bars + scale_fill_hue(c = 40)
bars + scale_fill_hue(h = c(180, 300))
使用 scale_colour_brewer() 或 scale_fill_brewer() 參數(shù),,即采用colorbrewer配色方案。對于類別型數(shù)據(jù)中的點(diǎn)而言,,最好使的調(diào)色板是“Set1”,、“Dark2”;對于面積型數(shù)據(jù)而言,,最好用的調(diào)色板是“Set2”,、“Pastel1”、“Pastel2”以及“Accent”,。使用 RColorBrewer::displat.brewer.all 可以列出所有調(diào)色板,。
bars + scale_fill_brewer(palette = 'Set1')
bars + scale_fill_brewer(palette = 'Set2')
bars + scale_fill_brewer(palette = 'Accent')
使用 scale_colour_grey() 或 scale_fill_grey() 參數(shù),將離散型變量映射為從黑到白灰度不同的顏色:
bars + scale_fill_grey()
bars + scale_fill_grey(start = 0.5, end = 1)
bars + scale_fill_grey(start = 0, end = 0.5)
使用 scale_colour_manual() 或 scale_fill_manual() 參數(shù)自制離散型顏色標(biāo)度,。點(diǎn)擊網(wǎng)址(https://github.com/karthik/wesanderson ),,你可以自己設(shè)計自己的調(diào)色板,然后用在你的作圖中,。舉個例子代碼如下:
library(wesanderson)
bars + scale_fill_manual(values = wes_palette('GrandBudapest'))
明亮的顏色更適用于散點(diǎn)圖,,而不適用于條形圖,過于刺眼,;淡色適用于條形圖,,但不適用于散點(diǎn)圖。下面舉幾個栗子,,感受一下~
3. 手動離散型標(biāo)度(The Manual Discrete Scales)離散型標(biāo)度 scale_linetype() ,、 scale_size_discrete() 和 scale_shape() 基本沒有選項。這些標(biāo)度按照一定的順序?qū)⒁蜃拥乃接成涞揭幌盗腥≈抵小?/p> 如果你要手動定制標(biāo)度,,使用一下幾種方式: scale_shape_manual() , scale_linetype_manual() , scale_colour_manual() ,。手動型標(biāo)度有個重要的參數(shù)是 value ,用于指定這個標(biāo)度該生成的值 加載數(shù)據(jù)集 msleep 做例子: > msleep
# A tibble: 83 x 11
name genus vore order conservation sleep_total sleep_rem sleep_cycle awake
1 Cheetah Acino… carni Carni… lc 12.1 NA NA 11.9
2 Owl monk… Aotus omni Prima… NA 17.0 1.80 NA 7.00
3 Mountain… Aplod… herbi Roden… nt 14.4 2.40 NA 9.60
4 Greater … Blari… omni Soric… lc 14.9 2.30 0.133 9.10
5 Cow Bos herbi Artio… domesticated 4.00 0.700 0.667 20.0
6 Three-to… Brady… herbi Pilosa NA 14.4 2.20 0.767 9.60
7 Northern… Callo… carni Carni… vu 8.70 1.40 0.383 15.3
8 Vesper m… Calom… NA Roden… NA 7.00 NA NA 17.0
9 Dog Canis carni Carni… domesticated 10.1 2.90 0.333 13.9
10 Roe deer Capre… herbi Artio… lc 3.00 NA NA 21.0
# ... with 73 more rows, and 2 more variables: brainwt , bodywt
我們繪制其中兩個變量( brainwt , bodywt )關(guān)系的散點(diǎn)圖,,手動將變量 vore 設(shè)置其中的顏色: plot <> ggplot(msleep, aes(brainwt, bodywt)) +
scale_x_log10() +
scale_y_log10()
plot +
geom_point(aes(colour = vore)) +
scale_colour_manual(
values = c('red', 'orange', 'green', 'blue'),
na.value = 'grey50'
)
有一些情況下我們需要手動修改顏色并手動增加圖例,,如下: (LakeHuron是一個時間序列數(shù)據(jù)) huron <> data.frame(year = 1875:1972, level = as.numeric(LakeHuron))
ggplot(huron, aes(year)) +
geom_line(aes(y = level + 5), colour = 'red') +
geom_line(aes(y = level - 5), colour = 'blue')
添加圖例,和上面的代碼貌似很像,,實則不同,,上面的顏色是我們指定的紅藍(lán),而下面的顏色是默認(rèn)生成的: huron <> data.frame(year = 1875:1972, level = as.numeric(LakeHuron))
ggplot(huron, aes(year)) +
geom_line(aes(y = level + 5, colour = 'above')) +
geom_line(aes(y = level - 5, colour = 'below'))
再進(jìn)一步指定顏色并給圖例命名,,就要添加我們的 scale_colour_manual 命令了: ggplot(huron, aes(year)) +
geom_line(aes(y = level + 5, colour = 'above')) +
geom_line(aes(y = level - 5, colour = 'below')) +
scale_colour_manual('Direction',
values = c('above' = 'red', 'below' = 'blue')
)
4.同一型標(biāo)度(The Identity Scale)這是一種很特殊的情況 當(dāng)你的數(shù)據(jù)能被R中的繪圖函數(shù)理解時,,即數(shù)據(jù)空間和圖形屬性空間相同,能使用同一型標(biāo)度 scale_identity luv colors 顏色數(shù)據(jù)集包含所有和R本身位置相對應(yīng)的數(shù)據(jù),,這里的數(shù)據(jù)本身就是顏色值(我們也就沒必要創(chuàng)造有意義的圖例),。下面顯示數(shù)據(jù)集的前6行:
head(luv_colours)
#> L u v col
#> 1 9342 -3.37e-12 0 white
#> 2 9101 -4.75e+02 -635 aliceblue
#> 3 8810 1.01e+03 1668 antiquewhite
#> 4 8935 1.07e+03 1675 antiquewhite1
#> 5 8452 1.01e+03 1610 antiquewhite2
#> 6 7498 9.03e+02 1402 antiquewhite3
點(diǎn)的顏色代表他們自身,即數(shù)據(jù)空間和圖形屬性空間完全重合: ggplot(luv_colours, aes(u, v)) +
geom_point(aes(colour = col), size = 3) +
scale_color_identity() +
coord_equal()
參考資料: Hadley Wickham(2016). ggplot2. Springer International Publishing. doi: 10.1007/978-3-319-24277-4 《R語言應(yīng)用系列叢書·ggplot2:數(shù)據(jù)分析與圖形藝術(shù)》
|