R语言ggplot2包的颜色设置

点击下载本文全部代码

ggplot2是R语言中最著名的数据可视化绘图包之一,是一个具有高自由度的绘图工具。在使用不同颜色表达变量中不同的类型或值时,ggplot2配置了多种颜色设置函数。本文以图形的fill属性为例(color属性同)展示了全部的颜色设置函数。

一、数据准备

使用了R自带的数据,state.name和state.area分别是美国50个州的名称和面积。将两个向量并成表格后取面积最小的8个州作为样例数据。

data <- data.frame(state = state.name,
                   area = state.area)
data <- dplyr::arrange(data, area)
data <- head(data, 8)

 

二、图形绘制

使用ggplot()函数,绘制两张柱状图,分别以名称(离散型)和面积(连续型)作为颜色填充变量。

library(ggplot2)

p1 <- ggplot(data = data,
            mapping = aes(x = state,
                          y = area,
                          fill = state)) +
        geom_col()

p2 <- ggplot(data = data,
            mapping = aes(x = state,
                          y = area,
                          fill = area)) +
        geom_col()

 

二、颜色设置函数

ggplot2的颜色设置函数按作用可分为四类,分别可用于离散型变量、连续型变量、日期型变量和日期时间型变量。

1. 离散型变量

scale_fill_brewer()函数可以调用调色板中的配色方案,将palette属性设置为方案名称即可,direction参数设置色带方向,1为正,-1为反。

使用RColorBrewer::display.brewer.all()函数可以可视化调色板中的所有配色方案。

RColorBrewer::display.brewer.all()
p1 + scale_fill_brewer(palette = "Set3",
                       direction = -1)

scale_fill_grey()是使用不同灰度进行配色,start和end属性分别设置黑白的边界值,0为纯白,1为纯黑。

p1 + scale_fill_grey(start = 0.2, end = 0.8)

scale_fill_manual()函数是完全自定义颜色,需要自行配色。

colors = as.character(palette.colors(8))
p1 + scale_fill_manual(values = colors)

scale_fill_viridis_d()函数将viridis色带分为数个离散颜色,begin和end参数分别控制起止的色带位置,direction参数设置色带方向,1为正,-1为反。

p1 + scale_fill_viridis_d(begin = 0,
                          end = 1,
                          direction = -1)

scale_fill_discrete()用于离散型颜色的设置,type参数设置使用的颜色向量。

colors = as.character(palette.colors(8))
p1 + scale_fill_discrete(type = colors)

scale_fill_identity()直接使用变量的值来表示颜色,若变量的值不能代表颜色,则会出错。这里为data数据集增加了一个表示颜色的color字段。

data$color = terrain.colors(8)
ggplot(data = data,
             mapping = aes(x = state,
                           y = area,
                           fill = color)) +
  geom_col() + 
  scale_fill_identity()

scale_fill_ordinal()默认使用viridis色带绘制离散型变量,type属性可以设置其他配色方案。

colors = as.character(palette.colors(8))
p1 + scale_fill_ordinal(type = colors)

2. 连续型变量

scale_fill_gradient()函数使用low与high属性创建渐变色带。

p2 + scale_fill_gradient(low = "red",
                         high = "green")

scale_fill_gradient2()函数使用low, mid与high属性创建二次渐变色,其中midpoint参数控制mid颜色的值。

p2 + scale_fill_gradient2(low = "green",
                          mid = "yellow",
                          high = "red",
                          midpoint = 5000))

scale_fill_gradientn()函数将一组离散的颜色转为渐变色,colours属性输入一组离散的颜色。

p2 + scale_fill_gradientn(colours = terrain.colors(8)))

scale_fill_distiller()函数可以将调色板中的配色方案应用在连续变量上,palette参数设置配色方案名称,direction参数设置色带方向,1为正,-1为反。

p2 + scale_fill_distiller(palette = "Set3",
                          direction = -1)

scale_fill_steps()使用low与high属性创建渐变色,并切分为数个离散颜色,n.breaks属性可设置离散颜色的个数。

p2 + scale_fill_steps(low = "blue",
                      high = "red",
                      n.breaks = 10)

scale_fill_steps2()使用low, mid与high属性创建二次渐变色,并切分为数个离散颜色,n.breaks属性可设置离散颜色的个数,midpoint属性设置mid颜色的对应值。

p2 + scale_fill_steps2(low = "blue",
                       high = "red",
                       mid = "yellow",
                       midpoint = 5000,
                       n.breaks = 10)

scale_fill_stepsn()函数将一组自定义的离散的颜色转为多次渐变色,再分为数个离散的颜色,n.breaks属性可设置离散颜色的个数。

colors = as.character(palette.colors(3))
p2 + scale_fill_stepsn(colours = colors,
                       n.breaks = 10)

scale_fill_fermenter()函数使用调色板进行颜色分阶,direction参数设置色带方向,1为正,-1为反。

p2 + scale_fill_fermenter(palette = "Set3",
                          direction = -1)

scale_fill_viridis_c()函数对连续型变量使用,将viridis色带分为数个离散颜色,begin和end参数分别控制起止的色带位置,direction参数设置色带方向,1为正,-1为反。

p2 + scale_fill_viridis_c(begin = 0,
                          end = 1,
                          direction = -1)

scale_fill_viridis_b()函数将连续型变量分箱后,赋予viridis色带的离散化颜色,begin和end参数分别控制起止的色带位置,n.breaks属性控制分箱数量,direction参数设置色带方向,1为正,-1为反。

p2 + scale_fill_viridis_b(begin = 0,
                          end = 1,
                          direction = -1,
                          n.breaks = 10)

scale_fill_continuous()函数用于连续性变量的颜色设置,type属性设置渐变颜方案。

p2 + scale_fill_continuous(type = "viridis")

scale_fill_hue()函数通过改变色相(h)饱和度(c)亮度(l)来调整颜色,direction参数设置色带方向,1为正,-1为反。

p1 + scale_fill_hue(h = c(0,100),
                    l = 200,
                    c = 100,
                    direction = -1)

scale_fill_binned()函数用于连续型变量的分箱显示,type参数控制色带,n.breaks参数控制分箱数量。

p2 + scale_fill_binned(type = "viridis",
                       n.breaks = 10)

3. 日期型变量

scale_fill_date()函数用low与high参数创建日期型变量的渐变色带。

data <- airquality
data$Date <- as.Date(paste("1973",
                           data$Month,
                           data$Day,
                           sep = "-"))
ggplot(data = data,
       mapping = aes(x = Date,
                     y = Temp,
                     fill = Date)) +
  geom_col() +
  scale_fill_date(low = "green",
                  high = "red")

4. 日期时间型变量

scale_fill_datetime()函数用用low与high参数创建日期时间型变量的渐变色带。

data <- head(beaver1, 50)
data$time <- as.POSIXct("2000-1-1 00:00") +
                data$time * 60
data$no <- 1:nrow(data)
ggplot(data = data,
       mapping = aes(x = no,
                     y = temp,
                     fill = time)) +
  geom_col() +
  scale_fill_datetime(low = "green",
                      high = "red")
Xiaoran Wu
Xiaoran Wu
Master’s student