作者:dwzb,R语言中文社区专栏作者。知乎专栏:https://zhuanlan.zhihu.com/Data-AnalysisR
第一篇戳:R|ggplot2(一)|一个完整的绘图流程
第二篇戳:R|ggplot2(二)|覆盖柱状图各种需求
第三篇戳:R|ggplot2(三)|coord 系列函数坐标轴转换
第四篇戳:R|ggplot2(四)|stat_ geom_ 和position
查看ggplot2包的官方文档,我们可以看到scale系列函数构成是有一定规律的。如scale_fill_gradient scale_x_continuous
三个单词用_连接
本文分为以下两个部分
对颜色的各种修改(color fill)
对坐标轴的更改(x y)
颜色的函数名中,第二个单词有color和fill两个,看你分组使用的是哪一个就用哪一个,比如柱状图,fill是柱子的填充颜色,color是柱子的边框颜色,一般我们都用fill接分组变量,这时就应该使用scale_fill_系列函数来更改颜色。再比如是geom_point作图使用color分组,则加scale_color_系列函数。
根据第三个单词的不同,更换的颜色分为以下几种
1. 离散型
2. 连续型
这里分成两类,离散型和连续型
下面我们分为两个部分
library(ggplot2)
p0
p0
p0 + scale_fill_manual(values=c("red", "blue", "green"))
p0 + scale_fill_manual(values=c("4" = "red", "r" = "blue", "f" = "darkgreen"))
# hue
# 主要参数:h = c(0, 360) + 15, c = 100, l = 65
# h指定色域,范围越大,颜色区分度越大。范围整体移动改变取色区域
# c越大饱和度越高
p0
p0 + scale_fill_hue(l=8)
p0 + scale_fill_hue(l=100)
p0 + scale_fill_hue(c=200)
p0 + scale_fill_hue(h=c(15,100))
p0 + scale_fill_hue(h=c(15,100)+100)
p0 + scale_color_hue(h=c(15,100)) # 前面使用fill分组,用color系列无效
ggplot(mpg, aes(class))+geom_bar(aes(color=drv)) +
scale_color_hue(h=c(15,100)) # 使用color分组才有效
# brewer
library(RColorBrewer)
display.brewer.all() # 展示所有颜色
# 主要是palette参数调用色板
p0
p0 + scale_fill_brewer() # 默认使用Blues调色板中的颜色
p0 + scale_fill_brewer(palette = "Greens")
p0 + scale_fill_brewer(palette = "Greens",direction = -1)
# grey
# 通过start end 两个参数指定,都在0-1范围内,0为黑,1为白
p0
p0 + scale_fill_grey()
p0 + scale_fill_grey(start=1, end=0)
p0 + scale_fill_grey(start=1, end=0.5)
# 连续型
df x = runif(100),
y = runif(100),
z1 = rnorm(100),
z2 = abs(rnorm(100))
)
pp0
# gradient
# 使用参数指定节点颜色
pp0
pp0 + scale_color_gradient(low = "white", high = "black")
pp0 + scale_color_gradient2(low = "white", mid = "red", high = "black")
pp0 + scale_color_gradientn(colours = terrain.colors(10))
# distiller
# 将ColorBrewer的颜色应用到连续变量上
pp0 + scale_color_distiller(palette = "Spectral")
pp0 + scale_color_distiller(palette = "Greens")
# identity
# 直接使用所接颜色变量元素指向的颜色
# 如果不能代表颜色就会报错
df0 x = rep(1:4,each=2),
y = rep(1:4, 2),
colour = c("red", "green", "blue", "yellow")
)
ggplot(df0,aes(x,y)) +geom_point(aes(color=colour))
ggplot(df0,aes(x,y)) +geom_point(aes(color=colour)) + scale_color_identity()
ggplot(df0,aes(x,y)) +geom_col(aes(fill=colour))
ggplot(df0,aes(x,y)) +geom_col(aes(fill=colour)) + scale_fill_identity()
ggplot(df0,aes(x,y)) +geom_col(aes(fill=colour)) +
scale_fill_identity(guide = "legend") # 把图例加回来
以上函数我们查看帮助文档看参数时,会发现有一个...,这代表除了本页列举的这些参数之外,这个函数还可以使用其他的参数,这些参数往往是几个函数共有的,所以在另外一个地方列举了出来。
我们直接输入函数名称查看源代码时,会发现分为两类
下面我将分别介绍这两类函数的参数
离散型函数所有参数使用?discrete_scale命令查看,下面只使用其中比较常用的一部分,连续型函数同理
p0 p0
p0 + scale_fill_manual("class", values=c("red", "blue", "green"))
p0 + scale_fill_manual(values=c("red", "blue", "green"),
breaks = c("4", "r", "f"),
labels = c("four", "rr", "rr"))
p0 + scale_fill_manual(values=c("red", "blue", "green"),
limits=c("4", "r"))
p0 + scale_fill_manual(values=c("red", "blue", "green", "black"),
limits=c("4", "r", "f", "6"))
pp0
pp0 + scale_color_gradient(low = "white", high = "black",
breaks=c(1,2,0.5),
labels=c("a","b","c"))
pp0 + scale_color_gradient("black", low = "white", high = "black",
limits=c(0.5,2))
这部分主要是对坐标轴做如下改变,比如
更改坐标轴名称
更改x轴上标数的位置和内容
显示对一个轴做统计变换
只展示一个区域内的点
更改刻度标签的位置
实现上面的这些可以使用scale_x等函数,同时像xlab这样的函数实现其中某一方面的功能,但是用起来更加方便
因为这里的数据也有连续和离散之分,所以也要使用不同的函数来实现。
# 横坐标是离散变量,纵坐标是连续变量
p0
# 其实scale_x_discrete函数主要参数也是上面颜色的离散变量函数的通用参数,在discrete_scale中查询
p0 + scale_x_discrete("cyl") # 更改坐标轴名称
p0 + scale_x_discrete(labels = c("4"="a","6"="b","8"="c")) # 更改横轴标度
p0 + scale_x_discrete(labels = c("4"="a","6"="b"))
p0 + scale_x_discrete(labels = letters[1:3])
p0 + scale_x_discrete(limits=c("4","6"))
# 连续变量可以更改标度,还可以进行统计变换
p0
p0 + scale_y_continuous("ylab_mpg")
p0 + scale_y_continuous(breaks = c(10,20,30))
p0 + scale_y_continuous(breaks = c(10,20,30), labels=scales::dollar)
p0 + scale_y_continuous(limits = c(10,30))
p0 + scale_y_reverse() # 纵坐标翻转,小数在上面,大数在下面
p0 + scale_y_log10()
p0 + scale_y_continuous(trans = "log10")
p0 + scale_y_sqrt()
# 使用更简单易用 的函数
p0 + xlab("cyl")
p0 + labs(x = "cyl")
p0 + ggtitle("ggtitle",subtitle = "subtitle")
p0 + xlim(c("4","6"))
# 更改刻度标签的位置
p0 + scale_x_discrete(position = "top") +
scale_y_continuous(position = "right")
公众号后台回复关键字即可学习
回复 R R语言快速入门免费视频
回复 统计 统计方法及其在R中的实现
回复 用户画像 民生银行客户画像搭建与应用
回复 大数据 大数据系列免费视频教程
回复 可视化 利用R语言做数据可视化
回复 数据挖掘 数据挖掘算法原理解释与应用
回复 机器学习 R&Python机器学习入门