R|ggplot2(五)|scale 修改默认设置

感谢关注天善智能,走好数据之路↑↑↑

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

本文作者:天善智能社区专家dwzb

天善智能社区地址:https://www.hellobi.com/

第一篇戳:R|ggplot2(一)|一个完整的绘图流程

第二篇戳:R|ggplot2(二)|覆盖柱状图各种需求

第三篇戳:R|ggplot2(三)|coord 系列函数坐标轴转换

第四篇戳:R|ggplot2(四)|stat_ geom_ 和position

查看ggplot2包的官方文档,我们可以看到scale系列函数构成是有一定规律的。如scale_fill_gradient scale_x_continuous

三个单词用_连接

第一个都是scale

第二个是要更改的内容,如color fill x y linetype shape size 等

第三个是具体的类型

本文分为以下两个部分

对颜色的各种修改(color fill)

对坐标轴的更改(x y)

对颜色的修改

颜色的函数名中,第二个单词有color和fill两个,看你分组使用的是哪一个就用哪一个,比如柱状图,fill是柱子的填充颜色,color是柱子的边框颜色,一般我们都用fill接分组变量,这时就应该使用scale_fill_系列函数来更改颜色。再比如是geom_point作图使用color分组,则加scale_color_系列函数。

根据第三个单词的不同,更换的颜色分为以下几种

1. 离散型

manual 直接指定分组使用的颜色

hue 通过改变色相(hue)饱和度(chroma)亮度(luminosity)来调整颜色

brewer 使用ColorBrewer的颜色

grey 使用不同程度的灰色

2. 连续型

gradient 创建渐变色

distiller 使用ColorBrewer的颜色

identity 使用color变量对应的颜色,对离散型和连续型都有效

这里分成两类,离散型和连续型

离散型的在颜色变量是离散变量的时候使用,比如分类时每一类对应一种颜色

连续型的在颜色变量是连续变量的时候使用,比如0-100的数,数值越大颜色越深这样

下面我们分为两个部分

更改颜色的各个函数的使用

通用参数设置

更改颜色的各个函数的使用

library(ggplot2)

p0<- ggplot(mpg, aes(class))+geom_bar(aes(fill=drv))

# manual

# 主要是values参数指定颜色

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 <- data.frame(

x = runif(100),

y = runif(100),

z1 = rnorm(100),

z2 =abs(rnorm(100))

)

pp0 <- ggplot(df, aes(x, y)) + geom_point(aes(colour = z1))

# 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 <- data.frame(

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函数,...中的参数是对所有离散型函数通用的

连续型函数调用了continuous_scale函数,...中的参数也是对所有连续型函数通用的

下面我将分别介绍这两类函数的参数

离散型函数所有参数使用?discrete_scale命令查看,下面只使用其中比较常用的一部分,连续型函数同理

p0<- ggplot(mpg, aes(class))+geom_bar(aes(fill=drv))

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"))# 只显示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 <- ggplot(mtcars, aes(factor(cyl), mpg)) + geom_point()

# 其实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")

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值