11.3 離散色階
離散顏色和填充出現(xiàn)在許多情況下研侣。一個(gè)典型的例子是一個(gè)條形圖谱邪,它將位置和填充都編碼為相同的變量。
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")
離散顏色的默認(rèn)方法是scale_fill_discrete()默認(rèn)值庶诡,scale_fill_hue()也能生成相同的圖:
bars
bars + scale_fill_discrete()
bars + scale_fill_hue()
這個(gè)默認(rèn)比例有一些限制(稍后討論)惦银,將首先討論用于生成更好的離散調(diào)色板的工具。
11.3.1 Brewer scales
scale_colour_brewer()是一個(gè)離散的色階,它和連續(xù)的模擬scale_colour_distiller()和分箱模擬scale_colour_fermenter()一起使用扯俱,從http://colorbrewer2.org/中精心挑選的“ColorBrewer”顏色书蚪。這些顏色在各種情況下都能很好地工作,盡管重點(diǎn)是在地圖上迅栅,所以顏色往往在大區(qū)域顯示時(shí)效果更好殊校。有很多不同的選擇:
RColorBrewer::display.brewer.all()
第一組調(diào)色板是順序刻度,當(dāng)離散刻度是有序(例如读存,排名數(shù)據(jù))時(shí)非常有用为流,并且可用于使用scale_colour_distiller()用于連續(xù)數(shù)據(jù)。對(duì)于無(wú)序分類數(shù)據(jù)让簿,最感興趣的調(diào)色板是第二組中的調(diào)色板敬察。'Set1' 和 'Dark2' 對(duì)點(diǎn)特別有用,'Set2'尔当、'Pastel1'莲祸、'Pastel2' 和 'Accent' 對(duì)區(qū)域效果很好。
bars + scale_fill_brewer(palette = "Set1")
bars + scale_fill_brewer(palette = "Set2")
bars + scale_fill_brewer(palette = "Accent")
請(qǐng)注意椭迎,沒有任何調(diào)色板對(duì)所有圖形都適用锐帜。散點(diǎn)圖通常使用小的繪圖標(biāo)記,明亮的顏色往往比微妙的效果更好:
# scatter plot
df <- data.frame(x = 1:3 + runif(30), y = runif(30), z = c("a", "b", "c"))
point <- ggplot(df, aes(x, y)) +
geom_point(aes(colour = z)) +
theme(legend.position = "none") +
labs(x = NULL, y = NULL)
# three palettes
point + scale_colour_brewer(palette = "Set1")
point + scale_colour_brewer(palette = "Set2")
point + scale_colour_brewer(palette = "Pastel1")
條形圖通常包含大塊顏色畜号,明亮的顏色可能會(huì)讓人難以抗拒缴阎。在這種情況下,微妙的顏色往往效果更好:
# bar plot
df <- data.frame(x = 1:3, y = 3:1, z = c("a", "b", "c"))
area <- ggplot(df, aes(x, y)) +
geom_bar(aes(fill = z), stat = "identity") +
theme(legend.position = "none") +
labs(x = NULL, y = NULL)
# three palettes
area + scale_fill_brewer(palette = "Set1")
area + scale_fill_brewer(palette = "Set2")
area + scale_fill_brewer(palette = "Pastel1")
11.3.2 色調(diào)和灰度
默認(rèn)配色方案在 HCL 色輪周圍選擇均勻分布的色調(diào)简软。這適用于多達(dá)大約八種顏色药蜻,但之后就很難區(qū)分不同的顏色。您可以使用h
替饿、c
和l
參數(shù)控制默認(rèn)色度和亮度以及色調(diào)范圍:
bars
bars + scale_fill_hue(c = 40)
bars + scale_fill_hue(h = c(180, 300))
默認(rèn)配色方案的一個(gè)缺點(diǎn)是,因?yàn)樗蓄伾季哂邢嗤牧炼群蜕{(diào)贸典,所以當(dāng)您以黑白方式打印它們時(shí)视卢,它們都顯示為相同的灰色陰影。請(qǐng)注意廊驼,如果您打算以黑白打印離散色階据过,最好使用scale_fill_grey()將離散數(shù)據(jù)映射到灰色,從淺到深:
bars + scale_fill_grey()
bars + scale_fill_grey(start = 0.5, end = 1)
bars + scale_fill_grey(start = 0, end = 0.5)
11.3.3 手動(dòng)調(diào)色
如果挑選的調(diào)色板都不適合妒挎,或者您有自己喜歡的顏色绳锅,您可以使用scale_fill_manual()手動(dòng)設(shè)置顏色。如果您希望選擇突出二級(jí)分組結(jié)構(gòu)的顏色或引起對(duì)不同比較的注意酝掩,這會(huì)很有用:
bars + scale_fill_manual(values = c("sienna1", "sienna4", "hotpink1", "hotpink4"))
bars + scale_fill_manual(values = c("tomato1", "tomato2", "tomato3", "tomato4"))
bars + scale_fill_manual(values = c("grey", "black", "grey", "grey"))
您還可以使用命名向量來(lái)指定要分配給每個(gè)級(jí)別的顏色鳞芙,這允許您按您喜歡的任何順序指定級(jí)別:
bars + scale_fill_manual(values = c(
"d" = "grey",
"c" = "grey",
"b" = "black",
"a" = "grey"
))
11.4 分箱顏色標(biāo)度
色階也能進(jìn)行分箱。默認(rèn)標(biāo)度scale_fill_binned(),轉(zhuǎn)換為scale_fill_steps()原朝。這些標(biāo)度有一個(gè)n.breaks
參數(shù)來(lái)控制由比例創(chuàng)建的離散顏色類別的數(shù)量驯嘱。與直覺相反,因?yàn)槿祟惖囊曈X系統(tǒng)非常擅長(zhǎng)檢測(cè)邊緣喳坠,這有時(shí)會(huì)使連續(xù)的顏色梯度更容易被感知:
erupt + scale_fill_binned()
erupt + scale_fill_steps()
erupt + scale_fill_steps(n.breaks = 8)
在其他方面scale_fill_steps()類似于scale_fill_gradient()鞠评,并允許您構(gòu)建自己的雙色漸變。還有一種三色變體scale_fill_steps2()和 n 色標(biāo)度變體scale_fill_stepsn()壕鹉,它們的行為與其連續(xù)對(duì)應(yīng)物相似:
erupt + scale_fill_steps(low = "grey", high = "brown")
erupt + scale_fill_steps2(low = "grey", mid = "white", high = "brown", midpoint = .02)
erupt + scale_fill_stepsn(n.breaks = 12, colours = terrain.colors(12))
也存在用于分級(jí)的brewer analog
剃幌,稱為scale_fill_fermenter():
erupt + scale_fill_fermenter(n.breaks = 9)
erupt + scale_fill_fermenter(n.breaks = 9, palette = "Oranges")
erupt + scale_fill_fermenter(n.breaks = 9, palette = "PuOr")
注意,如離散函數(shù)scale_fill_brewer()
、連續(xù)函數(shù)scale_fill_distiller()
與分箱函數(shù)scale_fill_fermenter()
不會(huì)在brewer顏色之間進(jìn)行插值晾浴,如果您設(shè)置n.breaks
的顏色大于調(diào)色板中的顏色數(shù)量负乡,則會(huì)出現(xiàn)警告消息,并且不會(huì)顯示某些顏色怠肋。
11.5 Alpha標(biāo)度
Alpha標(biāo)度將陰影的透明度映射到數(shù)據(jù)中的一個(gè)值敬鬓。它們通常不是很有用,但可以是一種方便的方法笙各,可以直觀地減輕不太重要的觀察钉答。Scale_alpha()
是scale_alpha_continuous()
的別名,因?yàn)檫@是alpha最常用的用法杈抢,它可以節(jié)省一些輸入数尿。