R 语言 ggplot2 scale_*_*()函数

1. ggplot中的scale_*_*()函数

借助代码:

help(package = "ggplot2")

获取ggolot2中的所有函数名称,检索到scale_*_*,可以看到有近百个函数,总结下来,可以分为几个大类,分别是:

  • scale_alpha_*() 【设置透明度】
  • scale_color_*() 或 scale_colour_*() 【设置边框/散点颜色】
  • scale_fill_*() 【设置填充颜色和图例相关内容】
  • scale_linetype_*() 【设置线条样式】
  • scale_shape_*() 【设置散点样式】
  • scale_size_*() 【设置散点/文本大小】
  • scale_radius_*() 【设置散点半径大小】
  • scale_x_*() 【设置横坐标相关参数】
  • scale_y_*() 【设置纵坐标相关参数】

其中,alpha, size, radius语法较为相似,linetype, shape较为相似,color, fill较为相似,x, y较为相似,因此主要分为以下四个部分学习

1. alpha, size, radius, 

2. linetype, shape

3. color, fill

4. scale_x_*() 和 scale_y_*()

5. scale_*_manual()

介绍性质,参考网址 https://zhuanlan.zhihu.com/p/102520133 

 

2.颜色标尺设置

2.1 连续型颜色标尺

当前版本的ggplot2提供了13个填充色设置的标尺函数(线条颜色也一样):

 
  1. > ls("package:ggplot2", pattern = "^scale_fill.+")
  2. [1] "scale_fill_brewer" "scale_fill_continuous" "scale_fill_date"
  3. [4] "scale_fill_datetime" "scale_fill_discrete" "scale_fill_distiller"
  4. [7] "scale_fill_gradient" "scale_fill_gradient2" "scale_fill_gradientn"
  5. [10] "scale_fill_grey" "scale_fill_hue" "scale_fill_identity"
  6. [13] "scale_fill_manual"

先看看“continuous”的用法。对于数据为非因子型的填充色映射,ggplot2自动使用“continuous”类型颜色标尺表示连续颜色空间。如果要修改默认颜色就要使用scale_fill_continuous函数进行修改,这个函数最有用的参数是low和high,分别表示低端和高端数据的颜色,中间颜色根据颜色空间space自动计算:

theme_set(theme_bw())

df <- expand.grid(1:30, 1:30)

colnames(df) <- c("x", "y")

df$z <- rnorm(900)

p <- ggplot(data = df, aes(x = x, y = y, fill = z))

p + geom_raster()

p + geom_raster() + scale_fill_continuous(low = "darkgreen", high = "orangered", space = "rgb")

颜色可以使用预设颜色名称,也可以使用十六进制表示。颜色空间可以是rgb或Lab,两者差别还比较大(rgb已经弃用):

  1. p + geom_raster() + scale_fill_continuous(low = "#000099", high = "#FF0000", space = "rgb")
  2. p + geom_raster() + scale_fill_continuous(low = "#000099", high = "#FF0000", space = "Lab")

连续填充色设置函数还有scale_fill_gradient,scale_fill_gradient2和 scale_fill_gradientn,其中scale_fill_gradient的用法和作用和scale_fill_continuous完全相同(其实ggplot2早期版本连续颜色标尺默认使用scale_fill_gradient,没有scale_fill_continuous函数;后者可能是H.W头脑清楚以后加进去的,相当于前者的别名)。scale_fill_gradient2增加了中间点和中间颜色的设置,效果相当不错:

  1. p + geom_raster() + scale_fill_gradient2(low = "darkgreen", high = "red", mid = "yellow")
  2. p + geom_raster() + scale_fill_gradient2(low = "darkgreen", high = "red", mid = "yellow", midpoint = 1)

而scale_fill_gradientn可以使用colours参数设置多个中间颜色,配合其它颜色参数函数使用也很不错:

  1. p + geom_raster() + scale_fill_gradientn(colours = c("blue", "green", "yellow", "red"))
  2. p + geom_raster() + scale_fill_gradientn(colours = terrain.colors(100))

注意参数名称为colours,不是colors,米国人民可能不习惯,不过问题不大。

2.2 离散(间断)型颜色标尺

如果数据是因子型的颜色映射,颜色标尺则是离散型的,修改标尺需要使用相应的离散型颜色标尺如scale_color_discrete或scale_color_hue。这两个函数只是别名函数,早期版本只有scale_color_hue。它们通过设置色调范围(h)、饱和度(c)和亮 度(l)获取颜色,不太容易掌握:

set.seed(100)
dt <- diamonds[sample(nrow(diamonds), 500), ]
p <- ggplot(data = dt, aes(x = carat, y = price, color = cut))
p + geom_point() + scale_color_discrete()
p + geom_point() + scale_color_discrete(h = c(150, 350), c = 100, l = 60)

注意:因为映射是color,所以标尺设置也得相应用scale_color而不是scale_fill。
scale_color_discrete或scale_color_hue设置颜色不是很直观,如果想要啥来啥,那就用manual类型函数:

  1. p + geom_point() + scale_color_manual(values = c("blue", "cyan", "yellow", "orange", "red"))
  2. p + geom_point() + scale_color_manual(values = rainbow(5))

grey灰度标尺函数是设置离散型颜色的另外一类函数,用法很简单。

  1. p + geom_point() + scale_color_grey(start = 0, end = 0.8)

brewer类型函数则可以直接使用RColorBrewer包预定义的一些调色板,那些调色板最多能设置8-11种颜色不等,如果超过最大颜色数就不合适了。

  1. x <- sample(LETTERS, 13)
  2. y <- 1:13 qplot(x = x, y = y, fill = x, geom = "bar") + scale_fill_brewer(palette = "YlOrRd")
  3. x <- x[1:8] y = y[1:8] qplot(x = x, y = y, fill = x, geom = "bar") + scale_fill_brewer(palette = "YlOrRd")

Palettes 在包 RColorBrewer 中 - 运行 display.brewer.all() 可以看到所有的选择:

有 3 类调色板(palettes)- sequential,diverging,和 qualitative - 每一类调色板包含 8 到 12 种颜色(可以利用 brewer.pal.info 或者 ?RColorBrewer 看到更多的细节)。

好奇的读者可能注意到如果柱状图包含 13 或者更多的柱子,我们可能会有下面的图中的麻烦:

ggplot(mtcars) + 
  geom_bar(aes(factor(hp), fill=factor(hp))) +
  scale_fill_brewer(palette="Set2")

 

与其去记那些调色板名称,还不如用manual可以设置自己需要的颜色(可参考本博客的文章《R语言进阶之一:颜色设置》)。
查看scale_fill_gradientn等函数的说明发现很多用于连续颜色设置的函数都有palette参数选项,似乎连续型和离散型颜色在函数上没有严格区别,但实际使用时会出错,或许这些功能只是H.W做的TODO list。

2.3.Viridis color palettes

    viridis提供了五种色带

  • viridis:option D,为默认色带,翠绿色;
  • magma:option A,岩溶色;
  • inferno:option B,火焰色;
  • plasma: option C,血色;
  • cividis: option E;

library(ggplot2)
# Gradient color
ggplot(iris, aes(Sepal.Length, Sepal.Width))+
  geom_point(aes(color = Sepal.Length)) +
  scale_color_viridis(option = "D")+
  theme_minimal() +
  theme(legend.position = "bottom")

# Discrete color. use the argument discrete = TRUE
ggplot(iris, aes(Sepal.Length, Sepal.Width))+
  geom_point(aes(color = Species)) +
  geom_smooth(aes(color = Species, fill = Species), method = "lm") + 
  scale_color_viridis(discrete = TRUE, option = "D")+
  scale_fill_viridis(discrete = TRUE) +
  theme_minimal() +
  theme(legend.position = "bottom")

 

参考:

1. https://openbiox.github.io/Cookbook-for-R-Chinese/ggplot2.html     Cookbook for R 中文版  

2. https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/ggplotvis.html       ggplot的各种图形  (更详细推荐)            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiangyong58

喝杯茶还能肝到天亮,共同进步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值