3
ggplot2
工具包
在前面几篇推文中,介绍的配色方法都是通过将已生成的颜色序列赋值给绘图函数的参数来实现,这也是一种比较容易理解的方式。而在
ggplot2
绘图系统中,除这种方式外,还可以使用它的颜色标度函数进行配色。
标度函数主要用于建立绘图数据与图形属性之间的联系,这类函数命名具有一定的规律性。标度函数涉及的属性类别包括:透明度(alpha)、表观颜色(color或colour)、填充颜色(fill)、线型(linetype)、形状(shape)、尺寸(size)、坐标轴(x、y)。
本篇主要介绍颜色标度函数,其中表观颜色(color或colour)和填充颜色(fill)虽然涂色的位置不同,但对应的标度函数的用法一致,因此在这里不作区分。
颜色标度函数的选取要根据数据类型考虑映射方式。
离散型变量
离散型变量在这里是指因子变量(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"
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()
函数可以直接调用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_colour_grey(
start = 0.2,
end = 0.8,
na.value = "red",
aesthetics = "colour"
p31 <- p01 + scale_fill_grey()
p32 <- p01 + scale_fill_grey(start = 0, end = 0.5)
p31 + p32
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()
函数是一种特殊的离散映射方式,因为它的映射变量本身就是颜色编码。
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
连续型变量
对于连续型变量,它的映射方式有两种:
连续型变量的默认离散方式是连续映射,连续映射默认的颜色标度函数是scale_colour_gradient()
。语法结构如下:
scale_colour_gradient(
low = "#132B43",
high = "#56B1F7",
space = "Lab",
na.value = "grey50",
guide = "colourbar",
aesthetics = "colour"
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
示例如下:
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()
函数用于连续变量的分箱映射,通过比较下面两幅图和前面两幅图可以很容易理解其含义:
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()
,这里不再演示。
3 ggplot2工具包在前面几篇推文中,介绍的配色方法都是通过将已生成的颜色序列赋值给绘图函数的参数来实现,这也是一种比较容易理解的方式。而在ggplot2绘图系统中,除这种方式外,还可...
一张好的图配色很重要,好的配色看着赏心悦目,ggplot2是R语言中一个优秀的绘图包,它提供的配色方案也是非常好看的,但是我们不能总是用ggplot2来绘图,需要一定的编程能力,大多数时候我们使用Excel或者origin进行绘图,这个时候就可以把ggplot2中的配色拿来用,本文就把ggplot2的默认配色的RGB值提取出来用于其他绘图软件所用。
1. 获取ggplot2默认配色的十六进制数
library(scales)
show_col(hue_pal()(1))
将其中的数据依次变为2,3,
scale_colour/fill_gradient()
scale_colour/fill_gradient2()
scale_colour/fill_gradientn()
scale_colour/fill_discrete()
scale_colour/fill_brewer()
scale_colour/f
我喜欢使用的ggplot主题和颜色的存储库
remotes::install_github("srfall/themes-and-colors")
library(themesNcolors)
本期介绍一下RColorBrewer包,万金油包,几乎适用任何情况。😘
2用到的包
rm(list = ls())library(tidyverse)library(RColorBrewer)library(patchwork)
3示例数据
本期就用大名鼎鼎的iris吧。
dat <- iris
4查看所有配色
display.brewer.all()
Note! 这个包里包含3种配色,sequentia
本教程介绍了如何使用 R 软件和 ggplot2 包创建箱线图。需要使用函数 geom_boxplot()。一个简化的格式是:
geom_boxplot(outlier.colour="black", outlier.shape=16,
outlier.size=2, notch=FALSE)
outlier.colour, outlier.shape, outlier.size : 离群值的颜色、形状和大小
notch:逻辑值。如果为 TRUE,则制作一个带缺口的箱线
ggnewscale
ggnewscale试图使在ggplot2使用多个标度ggplot2 。 尽管最初打算用于颜色和填充,但它应与任何aes ,例如shape , linetype和其他。 这是非常实验性的操作,因此后果自负!
对于定义多个比例的另一种方法,您也可以尝试 。
您可以使用以下命令从CRAN安装ggnewscale:
install.packages( " ggnewscale " )
或具有的开发版本:
# install.packages("devtools")
devtools :: install_github( " eliocamp/ggnewscale " )
如果您在出版物中使用ggnewscale,请将其引用,将不胜感激。 要获得建议的引用(以及其他R包),可以使用:
citation( " ggnewscale " )