3
ggplot2工具包
在前面幾篇推文中,介紹的配色方法都是透過將已生成的顏色序列賦值給繪圖函式的引數來實現,這也是一種比較容易理解的方式。而在
ggplot2
繪圖系統中,除這種方式外,還可以使用它的顏色標度函式進行配色。
標度函式主要用於建立繪圖資料與圖形屬性之間的聯絡,這類函式命名具有一定的規律性。標度函式涉及的屬性類別包括:透明度(alpha)、表觀顏色(color或colour)、填充顏色(fill)、線型(linetype)、形狀(shape)、尺寸(size)、座標軸(x、y)。
本篇主要介紹顏色標度函式,其中表觀顏色(color或colour)和填充顏色(fill)雖然塗色的位置不同,但對應的標度函式的用法一致,因此在這裡不作區分。
顏色標度函式的選取要根據資料型別考慮對映方式。
離散型變數
scale_color_hue()
離散型變數在這裡是指因子變數(factor),離散對映預設的顏色標度函式是
scale_color_hue()
,採用的是HCL配色模型:
scale_colour_hue(
。。。,
h = c(0, 360) + 15,
c = 100,
l = 65,
h。start = 0,
direction = 1,
na。value = “grey50”,
aesthetics = “colour”
)
h:包含兩個元素的向量,表示色相(H)的取值範圍;
c、l:飽和度(C)和亮度(L)的取值;
h。start:色相取值的起始值;
direction:1表示在色環上按順時針取色,-1表示按逆時針取色。
library(ggplot2)
library(patchwork)
df01 <- data。frame(x = c(“a”, “b”, “c”, “d”),
y = c(3, 4, 1, 2))
## 預設狀況
p01 <- ggplot(df01, aes(x, y, fill = x)) +
geom_bar(stat = “identity”) +
labs(x = NULL, y = NULL) +
theme(legend。position = “none”)
## 使用顏色標度函式
p11 <- p01 + scale_fill_hue(h = c(120, 240), c = 30)
p01 + p11
scale_color_brewer()
scale_color_brewer()
函式可以直接呼叫
RColorBrewer
工具包的調色盤。
scale_color_brewer(
。。。,
type = “seq”,
palette = 1,
direction = 1,
aesthetics = “colour”
)
type:型別引數,即
RColorBrewer
工具包的三類調色盤:seq、div、qual;
palette:調色盤名稱或序號,具體見
RColorBrewer
工具包。
注:
scale_color_brewer()
中的
seq
、
div
型別不屬於連續對映,而是有序的離散型對映,因此不能用於連續型變數。
p21 <- p01 + scale_fill_brewer(type = “qual”, palette = “Set2”)
p22 <- p01 + scale_fill_brewer(palette = “OrRd”)
p21 + p22
scale_color_grey()
scale_color_grey()
函式使用的是灰度配色模型。
scale_colour_grey(
。。。,
start = 0。2,
end = 0。8,
na。value = “red”,
aesthetics = “colour”
)
start、end:灰度的起始、終止值。
p31 <- p01 + scale_fill_grey()
p32 <- p01 + scale_fill_grey(start = 0, end = 0。5)
p31 + p32
scale_color_manual()
scale_color_manual()
函式採取的是手動賦值的方法,也就是直接把顏色序列賦值給它的引數
value
。
p41 <- p01+ scale_fill_manual(values = c(“sienna1”, “sienna4”,
“hotpink1”, “hotpink4”))
p42 <- p01 + scale_fill_manual(values = c(“tomato1”, “tomato2”,
“tomato3”, “tomato4”))
p41 + p42
scale_color_identity()
scale_color_identity()
函式是一種特殊的離散對映方式,因為它的對映變數本身就是顏色編碼。
df02 <- data。frame(x = c(“sienna1”, “sienna4”,
“hotpink1”, “hotpink4”),
y = c(3, 4, 1, 2))
## 預設狀況
p02 <- ggplot(df02, aes(x, y, fill = x)) +
geom_bar(stat = “identity”) +
labs(x = NULL, y = NULL) +
theme(legend。position = “none”)
## 使用顏色標度函式
p51 <- p02 + scale_fill_identity()
p02 + p51
連續型變數
對於連續型變數,它的對映方式有兩種:
一種是採用連續的調色盤使每個數值都對應一種顏色,即真正的連續對映(continuous);
另一種是將其離散化,即分箱對映(binned)。
scale_colour_gradient()
連續型變數的預設離散方式是連續對映,連續對映預設的顏色標度函式是
scale_colour_gradient()
。語法結構如下:
scale_colour_gradient(
。。。,
low = “#132B43”,
high = “#56B1F7”,
space = “Lab”,
na。value = “grey50”,
guide = “colourbar”,
aesthetics = “colour”
)
該函式只需要使用
low
和
high
引數分別指定連續變數最小值和最大值對應的顏色,即可自動計算一條連續的調色盤。
set。seed(135)
df <- data。frame(x = 1:40, y = rnorm(40))
## 預設狀況
p03 <- ggplot(df, aes(x, y, color = y)) +
geom_point(size = 2) +
labs(x = NULL, y = NULL)
## 使用顏色標度函式
p61 <- p03 + scale_color_gradient(low = “blue”, high = “red”)
p03 + p61
當連續型變數中包含具有特殊意義的中間值如0、1,可以使用
scale_color_gradient2()
函式:
scale_color_gradient2(
。。。,
low = muted(“red”),
mid = “white”,
high = muted(“blue”),
midpoint = 0,
space = “Lab”,
na。value = “grey50”,
guide = “colourbar”,
aesthetics = “colour”
)
當有多箇中間值時,可以使用
scale_colour_gradientn()
函式:
scale_colour_gradientn(
。。。,
colours,
values = NULL,
space = “Lab”,
na。value = “grey50”,
guide = “colourbar”,
aesthetics = “colour”,
colors
)
colours:顏色向量,函式會在向量每兩個元素之間生成一個連續調色盤。
示例如下:
p62 <- p03 + scale_color_gradient2(low = “blue”,
mid = “green”, high = “red”)
p63 <- p03 + scale_color_gradientn(colors = c(“blue”, “green”,
“yellow”, “red”),
breaks = c(-Inf, -1, 1, Inf))
p62 + p63
scale_color_steps()
scale_color_steps()
函式用於連續變數的分箱對映,透過比較下面兩幅圖和前面兩幅圖可以很容易理解其含義:
p71 <- p03 + scale_color_steps(low = “blue”, high = “red”)
p72 <- p03 + scale_color_steps(low = “blue”, high = “red”,
breaks = c(-Inf, -1, 1, Inf))
p71 + p72
同
scale_colour_gradient()
函式一樣,
scale_color_steps()
函式也有兩個擴充套件形式:
scale_color_steps2()
、
scale_color_stepsn()
,這裡不再演示。