ggplot2基礎(chǔ)(5)——配色與圖例
參考《R數(shù)據(jù)可視化手冊》、《R繪圖:一文了解ggplot2顏色的設(shè)置》记舆、《ggplot2圖例設(shè)置》逗余、《Continuous colour bar guide》、《ggplot2學(xué)習(xí)筆記——圖例系統(tǒng)及其調(diào)整函數(shù)》
在ggplot2中顏色是一個圖形屬性(aesthetic)影钉。一般而言我們會將數(shù)據(jù)中的某個屬性映射為顏色画髓,以便于在幫助讀者來理解圖片的內(nèi)容,而在R中平委,變量可以分為以下幾種:
- 連續(xù)變量
- 離散變量
其中離散變量又可以分為
- 有序的分類變量
- 無序的分類變量
對于不同類型的變量奈虾,我們可以使用不同的方法進行映射
查看R中的顏色名稱可以使用
colors()
函數(shù)
1 顏色
1.1連續(xù)型變量的映射函數(shù)
填充色函數(shù)
填充色函數(shù)包括
-
scale_fill_gradient()
兩色漸變 -
scale_fill_gradient2()
三色漸變 -
scale_fill_gradientn()
等間隔的n種顏色的漸變色 -
scale_fill_viridis_c()
viridis調(diào)色板
輪廓色函數(shù)
輪廓色函數(shù)包括:
-
scale_colour_gradient()
兩色漸變 -
scale_colour_gradient2()
三色漸變 -
scale_colour_gradientn()
等間隔的n種顏色的漸變色 -
scale_colour_viridis_c()
viridis調(diào)色板
在使用兩色漸變的時候,需要指定參數(shù)low
和high
;
在使用三色漸變的時候肉微,還需要指定參數(shù)mid
匾鸥;
使用間隔n中間色漸變的時候,需要指定colous
浪册;
viridis調(diào)色板是對色盲友好的調(diào)色板扫腺,ggplot2(3.0.0)附帶了該調(diào)色板
library(ggplot2)
library(scales)
library(cowplot)
p <- ggplot(mtcars, aes(x = wt, y = mpg, colour=disp)) +
geom_point(size=3)
p1 <- p + scale_colour_gradient(low="black", high="white")
p2 <- p + scale_colour_gradient2(low=muted("red"), mid="white", high=muted("blue"), midpoint=10)
p3 <- p + scale_colour_gradientn(colours=c("darkred", "orange", "yellow", "white"))
p4 <- p + scale_colour_viridis_c()
plot_grid(p, p1, p2, p3, p4)
1.2 離散型變量的映射函數(shù)
填充色函數(shù)
-
scale_fill_discrete()
/scale_fill_hue
色輪周圍均勻等距色 -
scale_fill_grey()
灰度調(diào)色板 -
scale_fill_viridis_d()
viridis調(diào)色板 -
scale_fill_brewer()
ColorBrewer調(diào)色板 -
scale_fill_manual()
自定義顏色
輪廓色函數(shù)
-
scale_colour_discrete()
/scale_colour_hue
色輪周圍均勻等距色 -
scale_colour_grey()
灰度調(diào)色板 -
scale_colour_viridis_d()
viridis調(diào)色板 -
scale_colour_brewer()
ColorBrewer調(diào)色板 -
scale_colour_manual()
自定義顏色
先看幾個簡單的例子:
library(ggplot2)
library(scales)
library(cowplot)
p <- ggplot(mtcars, aes(x = wt, y = mpg, colour=factor(cyl))) +
geom_point(size=3)
p1 <- p + scale_colour_viridis_d()
p2 <- p + scale_colour_hue(l=45)
p3 <- p + scale_colour_brewer(palette = "Oranges")
p4 <- p + scale_colour_grey()
plot_grid(p, p1, p2, p3, p4)
最后重點說一下自定義調(diào)色板,在使用自定義調(diào)色板的時候村象,需要指定參數(shù)values
笆环,需要注意的是values參數(shù)在指定過程中,其顏色的數(shù)量需要與離散變量的數(shù)量相一致厚者,不過不想使用默認的顏色順序躁劣,也可在values中指定库菲。
library(viridis)
p <- ggplot(mtcars, aes(x = wt, y = mpg, colour=factor(cyl))) +
geom_point(size=3)
p1 <- p + scale_colour_manual(values=c("red", "blue", "yellow"))
p2 <- p + scale_colour_manual(values=c("6"="red", "8"="blue", "4"="yellow"))
p3 <- p + scale_colour_manual(values=viridis(3))
plot_grid(p, p1, p2, p3)
2 圖例
對于圖例的操作,主要涉及三類函數(shù)鳖擒,分別是:
guides()
theme()
-
scale_fill_****()
和scale_colour_****()
2.1 guide()
guides()
函數(shù)的定義為:
guides(
colour/fill = guide_colorbar()/guide_legend(),
size = guide_legend(),
shape = guide_legend(),
linetype = guide_legend(),
alpha = guide_legend()
)
其中guide_colorbar()
主要用于處理連續(xù)型變量,guide_legend()
用于處理離散型變量蒋荚。
guide_colorbar()
函數(shù)的定義為:
guide_colorbar(
title = waiver(),
title.position = NULL,
title.theme = NULL,
title.hjust = NULL,
title.vjust = NULL,
label = TRUE,
label.position = NULL,
label.theme = NULL,
label.hjust = NULL,
label.vjust = NULL,
barwidth = NULL,
barheight = NULL,
nbin = 300,
raster = TRUE,
frame.colour = NULL,
frame.linewidth = 0.5,
frame.linetype = 1,
ticks = TRUE,
ticks.colour = "white",
ticks.linewidth = 0.5,
draw.ulim = TRUE,
draw.llim = TRUE,
direction = NULL,
default.unit = "line",
reverse = FALSE,
order = 0,
available_aes = c("colour","color", "fill")
...
)
在此只介紹一些比較重要的參數(shù):
-
title
圖例的標(biāo)題 -
title.position
圖例的位置 -
title.theme
通過element_text()
函數(shù)設(shè)置圖例標(biāo)題文字的大小馆蠕、字體期升、顏色、傾斜角度等樣式 -
label
是否顯示圖例 -
label.position
圖例標(biāo)簽的位置 -
label.theme
通過element_text()
函數(shù)設(shè)置圖例標(biāo)簽文字的大小互躬、字體播赁、顏色、傾斜角度等樣式 -
barwidth
與barheight
使用unit()
函數(shù)設(shè)置圖例的寬度和高度 -
ticks
色條上的刻度是否可見 -
draw.ulim
和draw.llim
上下刻度線是否可見 -
direction
圖例水平放置還是垂直放置吼渡,可以設(shè)置為"horizontal"或"vertical" -
reverse
圖例刻度的順序是否顛倒 -
order
多類圖例時容为,圖例的排序
guide_legend()
函數(shù)的定義為:
guide_legend(
title = waiver(),
title.position = NULL,
title.theme = NULL,
title.hjust = NULL,
title.vjust = NULL,
label = TRUE,
label.position = NULL,
label.theme = NULL,
label.hjust = NULL,
label.vjust = NULL,
keywidth = NULL,
keyheight = NULL,
direction = NULL,
default.unit = "line",
override.aes = list(),
nrow = NULL,
ncol = NULL,
byrow = FALSE,
reverse = FALSE,
order = 0,
...
)
其中絕大多數(shù)參數(shù)與guide_colorbar
相一致,差別在于:
-
key.width
/key.height
/key.size
用于控制圖例中小矩形塊(key)的寬寺酪、高舟奠、大小
library(ggplot2)
library(scales)
library(cowplot)
p <- ggplot(mtcars, aes(x = wt, y = mpg, colour=disp, shape=factor(cyl))) +
geom_point(size=3)
p1 <- p +
guides(
color = guide_colorbar(
title = "Legend 1",
ticks = FALSE,
label.position='left',
order = 2,
),
shape = guide_legend(
title = "Legend 2",
label.position='top',
order = 1,
)
)
p2 <- p +
guides(
color = guide_colorbar(
title = "Legend 1",
ticks = FALSE,
label.position='left',
reverse = TRUE,
order = 1,
),
shape = guide_legend(
title = "Legend 2",
label.position='top',
order = 2
)
)
plot_grid(p, p1, p2)
2.2 theme()
在主題中,也能夠?qū)D例進行一定的設(shè)置房维,其參數(shù)為以legend
開頭的一些參數(shù),包括:
-
legend.background
圖例的背景色抬纸,使用element_rect()
進行設(shè)置 -
legend.margin
圖例的邊界 -
legend.spacing
圖例間的空距咙俩,使用unit()
進行設(shè)置 legend.spacing.x
legend.spacing.y
-
legend.key
圖例符號 -
legend.key.size
圖例符號的大小 -
legend.text
圖例文本標(biāo)簽 -
legend.text.align
圖例文本標(biāo)簽的對齊方式(0為左對齊,1為右對齊) -
legend.title
圖例標(biāo)題,使用element_text()
進行設(shè)置 -
legend.title.align
圖例標(biāo)題的對齊方式 -
legend.position
圖例位置("none", "top", "bottom", "left", "right") -
legend.direction
圖例水平放置還是垂直放置阿趁,可以設(shè)置為"horizontal"或"vertical" -
legend.justification
圖例居中的方式 -
legend.box
多圖例的排列方式膜蛔,可以設(shè)置為"horizontal"或"vertical" -
legend.box.just
多圖例的居中方式 legend.box.margin
legend.box.background
legend.box.spacing
其中需要說明的是:
-
legend.position
除了可以設(shè)置為"none", "top", "bottom", "left", "right"外,還可以設(shè)置為c(x, y)的形式脖阵,x/y的取值范圍為(0,1)皂股,其中圖片的左下角為(0, 0),右上角為(1, 1)命黔;而legend.justification
用來設(shè)定圖例的那個點放置到legend.position
所指定的坐標(biāo)上(默認為(0.5, 0.5))
library(ggplot2)
library(scales)
library(cowplot)
p <- ggplot(mtcars, aes(x = wt, y = mpg, colour=disp, shape=factor(cyl))) +
geom_point(size=3)
p1 <- p + theme(
legend.position = c(1,0),
legend.justification=c(1,0),
)
p2 <- p1 + theme(
legend.background = element_blank(),
legend.key = element_blank(),
legend.title = element_text(
face = "italic",
color = "red",
size = 14,
)
)
plot_grid(p, p1, p2)
2.3 scale_fill_****()和scale_colour_****()
這兩個函數(shù)在顏色部分已經(jīng)做了比較細致的介紹了呜呐,在此只介紹一些和圖例相關(guān)的設(shè)置
-
labs
圖例的標(biāo)簽名稱 -
limits
可以用于設(shè)置類別的順序