推荐使用colorspace
包,或者ggsci
包中的色板进行配色。
ggplot图形绘制中经常用到颜色映射aes
,常见的有aes(color=var)
或者aes(fill=var)
进行边框或者填充色的绘制。比如:
library(tidyverse)
iris %>% ggplot()+
geom_point(aes(Sepal.Length,Sepal.Width,color=Species),size=3)
上图用到了color
边框线的映射,有时候也会用到fill
填充色映射,比如:
p=iris %>% ggplot(aes(x=Species,y=Sepal.Length))+
geom_boxplot(aes(fill=Species))
p
但是此处的颜色类型均为系统默认,没有自定义形式,而ggplot图形系统中,则可以利用scale_fill_xxx
形式对颜色梯度进行自定义。下文中color
与fill
实际是一致的。
如果希望改变次序,则要调用scale_x_discrete
中的limits
参数。
# 柱子数量不变,排序不变,legend不变
p+scale_x_discrete(breaks=c("virginica","setosa"))
# 柱子数量改变,排序改变,legend改变
p+scale_x_discrete(limits=c("virginica","setosa"))
## Warning: Removed 50 rows containing missing values (stat_boxplot).
#图形不变,legend处排序变化,颜色不变
p+scale_fill_discrete(breaks=c("virginica","setosa"))
#图形不变,legend处排序变化,颜色发生变化
p+scale_fill_discrete(limits=c("virginica","setosa"))
默认情况下,离散比例的颜色围绕HSL色环
均匀分布。例如,如果有两种颜色,那么它们将从圆圈上的相对点中选择;如果有三种颜色,它们在色环上将相隔 120° 等等。
默认颜色选择使用 scale_fill_hue() 和 scale_colour_hue(),hue
颜色系统有修改:
p+scale_fill_hue(h=c(120,360))
p+scale_fill_hue(l=80)#设置亮度(l默认45)
p+scale_fill_hue(l=30)#设置亮度(l默认45)
p+scale_fill_hue(c=50)#设置饱和度(c默认100)
p+scale_fill_hue(c=100)#设置饱和度(c默认100)
p+scale_fill_grey(start=0.2,end=0.8)
RColorBrewer
包中有多个色板可供选择:
RColorBrewer::display.brewer.all()
RColorBrewer
中有3套色板,type
参数,分别为:
对于离散变量映射,则有:
p+scale_fill_brewer(type="seq",palette = 2)
p+scale_fill_brewer(type="qual",palette = 2)
p+scale_fill_brewer(type="div",palette = 2)
或者直接指定色板名称palette=??
p+scale_fill_brewer(palette="Spectral")
上述颜色也可以在colorspace
包中获取。
library(colorspace)
## Warning: package 'colorspace' was built under R version 4.1.1
hcl_palettes(plot = TRUE)
hcl_palettes("qualitative", plot = TRUE)
hcl_palettes("sequential (single-hue)", n = 7, plot = TRUE)
hcl_palettes("sequential (multi-hue)", n = 7, plot = TRUE)
hcl_palettes("diverging", n = 7, plot = TRUE)
divergingx_palettes(plot = TRUE)
如果需要具体颜色值,则通过:
#colorspace::diverging_hcl(n = 7, "Dark 2")
#colorspace::qualitative_hcl(4, palette = "myset")
colorspace::sequential_hcl(n = 7, palette = "Peach")
## [1] "#EA4C3B" "#EF6D48" "#F3885B" "#F6A173" "#F8B78E" "#F9CCA9" "#FADDC3"
在ggplot2
图形系统,则可以直接调用colorspace
中的色板:
p+scale_fill_discrete_qualitative(palette="Set2",nmax=6,rev=T,order=4:6)
p1=iris %>% ggplot(aes(x=Sepal.Length,y=Sepal.Width))+
geom_point(aes(color=Sepal.Length),size=3)
p1
p1+scale_color_continuous(type="gradient")
p1+scale_color_continuous(type="viridis")
p1+scale_color_continuous(breaks=c(2.5,5.2,6.8),limits=c(1,7))
上图中limits规定了映射范围,breaks参数规定了断点值。
p1+scale_color_gradient(low="red",high="blue")
p1+scale_color_gradient2(low="red",mid="white",high="blue",midpoint = 6)
p1+scale_color_gradientn(colors=c("yellow","green","red","black"))
其中distiller把brewer
离散色板中均匀插值7个色块形成过渡色,而fermenter则是把brewer
色板的颜色离散化。
p1+scale_color_distiller(palette = "Spectral")
p1+scale_color_fermenter(palette = "Spectral")
p1+scale_color_steps(low="red",high="blue")
p1+scale_color_binned()
对steps
还有:
p1+scale_fill_steps(low = "#002B43", high = "#99B1F7")
p1+scale_fill_steps2(low = "red", mid = "white",high = "blue")
p1+scale_fill_stepsn(colors=c(ggsci::pal_aaas()(5)))
对应colorspace
包,则有scale_fill_continous_???:
p1+scale_color_continuous_diverging(palette = "Cork")
p1+scale_color_continuous_divergingx(palette = "Geyser")
p1+scale_color_continuous_qualitative(palette = "Warm")
p1+scale_color_continuous_sequential(palette = "Heat")
p1+scale_color_binned_qualitative(palette = "Warm")
p1+scale_color_viridis_c()
p+scale_fill_viridis_d()
p1+scale_color_viridis_b()
自定义主要对应离散映射:
aa=unique(iris$Species)
p+scale_fill_manual(breaks = c(aa[2],aa[1],aa[3]),
values = c("darkorange", "purple", "cyan4"))