- 查看ggplot2 支持的色带
library(RColorBrewer)
display.brewer.all(type = "all")
display.brewer.all(type = "seq")
display.brewer.all(type = "div")
display.brewer.all(type = "qual")brewer.pal.info # 共包括div qual seq三个类别
scale_fill_brewer(name="",type='div',palette=7)
color=brewer.pal(7, "Set1")[1]
- 翻转色带
# define a color rmap palette
colr = colorRampPalette(rev(brewer.pal(8,"RdYlBu"))) # reverse colorbar rev()
- 自定义色带和色带标签
scale_fill_brewer(name="Modeling year",type='qual',palette=7,direction=1)
- 连续型色带和离散化色带的区别
离散色带:
scale_fill_brewer(name="",type=‘div’,palette=7)
连续色带
scale_fill_gradientn(colors = rev(brewer.pal(10,“Spectral”)))
scale_fill_gradientn(colours = heat.colors(20),guide=“colourbar”)
scale_fill_gradient(low = “blue”, high = “red”,guide=“colourbar”)
scale_colour_gradient2()
### 连续型色带guide_colorbar
### 离散型色带guide_legend
### guides(fill = guide_legend(nrow = 1,title="")) # 图例一排 反转图例的顺序
7.2 颜色fill/color,灰度grey,色相hue, 色盲颜色
参数解释:
- type 在scale_color_continuous中表示指定变化类型,是普通渐变“gradient”还是色盲渐变“viridis”
在scale_xxx_distiller()中表示指定色板类型,是“seq”渐变,“qual”离散对比,还是“div”两极色板 - palette 表示指定色条类型,当type色板类型已经指定的情况下,可以用序号指定,若type未指定,则必须用色条名称指定
- direction 表示指定标度与变量的匹配方向,direction=-1表示方向翻转 在scale_xxx_hue()中,direction=1表示色轮的顺时针方向,direction=-1表示逆时针方向
- low, high表示渐变的颜色两极颜色名称或HEX色值,如果用颜色名称指定,则可用muted(“color”)指定某个暗色
- mid 表示指定渐变的中点颜色
- midpoint 表示指定渐变的中点对应的变量值
- colors/colours 多色渐变中,指定颜色向量, 如colour = terrain.colors(10)取10个地形图颜色作为渐变的基础色
- values 表示指定自定义颜色向量,如果变量为数字类型,则默认按数字大小顺序与values匹配,
如果变量为字符类型,则默认按变量字母顺序与values匹配,
为了按照想要的顺序匹配,可以给变量增加一个因子水平,然后自动按照因子水平与values匹配(自上而下,由低到高)
也可给values向量设置名称属性,名称与要映射的变量值一样,然后按照名称属性匹配 - range 表示指定指定显示的透明度范围,在[0, 1]区间内,0表示不透明,1表示不透明
- limits 表示设定显示范围
- breaks 表示设定图例刻度位置
- labels 表示指定图例刻度处显示标签
- h 表示指定色相范围,在区间[0, 360]内
- c 表示指定chroma(色度,鲜艳或是暗淡)值,最大值取决于hue和luminance
- l 表示指定luminance(亮度),在区间[0, 100]内
- start 表示指定灰度起点,从0到1,0表示白色,1表示黑色
- end 表示灰度结束点,通常end,默认end更黑,若设定start>end,则翻转标度
- end 表示灰度结束点,通常end,默认end更黑
- 其它公共参数:name图例名称,palette, breaks, labels, limits, expand, position(标签在图例的上)
- 只有连续的标度函数,如
scale_xxx_gradient^()才支持trans内置参数
7.2.1 color/fill
library(ggplot2)# scale_fill_continuous
v <- ggplot(faithfuld, aes(waiting, eruptions, fill = density)) + geom_tile()
v
v + scale_fill_continuous(type = "gradient", name = "密度", breaks = c(0, 0.05, 0.01, 0.02, 0.03, 0.04), labels = c(0, 0.05, 0.01, 0.02, 0.03, 0.04), position = "left") # 更改图例名称,不支持刻度点,图例标签位置,匹配方向等参数
v + scale_fill_continuous(type = "viridis") # 结果与scale_fill_viridis_c()一样# scale_color_distiller
set.seed(19)
dsamp <- diamonds[sample(nrow(diamonds), 1000), ]
(d <- ggplot(dsamp, aes(carat, price)) + geom_point(aes(colour = clarity)))
v <- ggplot(faithfuld) + geom_tile(aes(waiting, eruptions, fill = density))
v
v + scale_fill_distiller(palette = "Spectral", breaks = c(0, 0.05, 0.01, 0.02, 0.03, 0.04), labels = c(0, 0.05, 0.01, 0.02, 0.03, 0.04)) # 更改图例刻度及标签失败# scale_xxx_gradient^()
set.seed(18)
df <- data.frame(x = runif(100), y = runif(100), z1 = rnorm(100), z2 = abs(rnorm(100)))ggplot(df, aes(x, y)) + geom_point(aes(colour = z2)) # 默认从light blue到dark blueggplot(df, aes(x, y)) + geom_point(aes(colour = z2)) + scale_colour_gradient(low = "white", high = "black", name = "这是图例名称", breaks = c(0, 0.5, 1, 2, 3, 4), labels = c(0, 0.5, 1, 2, 3, 4)) # 灰度渐变,修改图例名称,图例刻度及刻度标签ggplot(df, aes(x, y)) + geom_point(aes(colour = z1), size = 2) + scale_colour_gradient2() # 两极渐变,ggplot(df, aes(x, y)) + geom_point(aes(fill = z2), shape = 21, size = 3) + scale_fill_gradient2(low = "blue", mid = "red", midpoint = 2, high = "cyan", name = "这是图例名称") # 修改基础颜色,ggplot(df, aes(x, y)) + geom_point(aes(colour = z1)) + scale_colour_gradientn(colours = terrain.colors(10), name = "这是图例名称") # 应用terrain.colors内置色板,更改标度方向失败
默认从light blue到dark blue:
灰度渐变,修改图例名称,图例刻度及刻度标签:
两极渐变:
修改基础颜色:
应用terrain.colors内置色板,更改标度方向失败:
library(ggplot2)# scale_color_brewer
dsamp <- diamonds[sample(nrow(diamonds), 1000), ]
(d <- ggplot(dsamp, aes(carat, price)) + geom_point(aes(colour = clarity)))
d + scale_colour_brewer(name = "钻石透明度", palette = "Greens", direction = -1, position = "left") # 更改图例名称,色板,标度方向,更改位置失败
d + scale_colour_brewer(palette = "Set1", name = "钻石透明度") # 多种颜色也可以渐变,非常方便# scale_color_manual
p <- ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = factor(cyl)))
p + scale_colour_manual(values = c("red", "blue", "green"))# 按名称属性匹配
cols <- c(`8` = "red", `4` = "blue", `6` = "darkgreen", `10` = "orange") # 设定名称属性
p + scale_colour_manual(values = cols) # 名称属性匹配p + scale_colour_manual(name = "这是图例名字", values = cols, breaks = c("4", "6", "8"), labels = c("four", "six", "eight"), limits = c("4", "6", "8", "10"))
自定义颜色:
7.2.2 透明度、色相、灰度
library(ggplot2)p <- ggplot(mpg, aes(displ, hwy)) +geom_point(aes(alpha = year))
p
p + scale_alpha(range = c(0.4, 0.8), name = "这是图例名称") # 设定透明度范围为0.4到0.8dsamp <- diamonds[sample(nrow(diamonds), 1000), ]
d <- ggplot(dsamp, aes(carat, price)) + geom_point(aes(colour = clarity))d + scale_colour_hue(name = "这是图例名称") # 默认全色轮
d + scale_colour_hue(l = 70, c = 150, name = "这是图例名称")# 调整色度和亮度
d + scale_colour_hue(h = c(0, 90), "这是图例名称") # 设定色相范围,0代表红色与橙色的分界
d + scale_colour_hue(h = c(90, 180), "这是图例名称")
d + scale_colour_hue(h = c(270, 360), "这是图例名称")# 灰度
p <- ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = factor(cyl)))
p + scale_colour_grey()
p + scale_colour_grey(start = 0.8, end = 0.2, name = "这是图例名称") # 修改灰度范围# 灰度增加缺失值映射
miss <- factor(sample(c(NA, 1:5), nrow(mtcars), replace = TRUE))
ggplot(mtcars, aes(mpg, wt)) +geom_point(aes(colour = miss)) + # 若缺失向量是data数据的子集,则可以映射scale_colour_grey(na.value = "green", name = "这是图例名称") # 增加缺失值为绿色
7.2.3 色盲友好色
library(ggplot2)# 离散变量
txsamp <- subset(txhousing, city %in% c("Houston", "Fort Worth", "San Antonio", "Dallas", "Austin"))
d <- ggplot(data = txsamp, aes(x = sales, y = median)) + geom_point(aes(colour = city))
dd + scale_colour_viridis_d() # 默认viridis色板
d + scale_colour_viridis_d(option = "plasma", name = "这是图例名称") # 更改色板为plasma
d + scale_colour_viridis_d(option = "B", name = "这是图例名称") # 更改色板为inferno
d + scale_colour_viridis_d(option = "magma", name = "这是图例名称")
d + scale_colour_viridis_d(option = "cividis", name = "这是图例名称")# 连续变量
v <- ggplot(faithfuld) + geom_tile(aes(waiting, eruptions, fill = density))
v + scale_fill_viridis_c()
v + scale_fill_viridis_c(option = "plasma", name = "这是图例名称")