ggplot2|详解八大基本绘图要素(二)

简介: ggplot2|详解八大基本绘图要素(二)

本文首发于“生信补给站”公众号 https://mp.weixin.qq.com/s/UMuZ1MiuKDheHk9mwA9EXA

四、标尺(Scale)

在对图形属性进行映射之后,使用标尺可以控制这些属性的显示方式,比如坐标刻度,颜色属性等。

ggplot2的scale系列函数有很多,命名和用法是有一定规律的。一般使用三个单词用_连接,如scale_fill_gradient和 scale_x_continuous,

  • 第一个都是scale
  • 第二个是color fill x y linetype shape size等可更改的参数
  • 第三个是具体的类型

此处仅介绍颜色设置坐标轴设置函数的一些用法,其他类似。


1 颜色标尺设置(color fill)

1.1 颜色标尺“第二个”单词选择方法

颜色的函数名第二个单词有color和fill两个,对应分组使用的颜色函数即可。

比如柱状图,fill是柱子的填充颜色,这时就使用scale_fill系列函数来更改颜色。

比如点图使用color分组,则使用scale_color_系列函数来更改颜色。


1.2 颜色标尺“第三个”单词选择方法

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

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

  • manual 直接指定分组使用的颜色
  • hue 通过改变色相(hue)饱和度(chroma)亮度(luminosity)来调整颜色
  • brewer 使用ColorBrewer的颜色
  • grey 使用不同程度的灰色

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

  • gradient 创建渐变色
  • distiller 使用ColorBrewer的颜色
  • identity 使用color变量对应的颜色,对离散型和连续型都有效


1.3 更改离散型变量的颜色函数

#数据,映射以及几何对象

p <- ggplot(diamond, aes(color))+geom_bar(aes(fill=cut)) #左上

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

#values参数指定颜色
#直接指定颜色 (右上)
p + scale_fill_manual(values=c("red", "blue", "green","yellow","orange"))
#对应分组指定 (左下)
p + scale_fill_manual(values=c("Fair" = "red", "Good" = "blue", "Very Good" = "green" , Premium = "orange", Ideal = "yellow"))

#更改图例名字,对应指定并更改图例标签 (右下)

p + scale_fill_manual("class", values=c("red", "blue", "green","yellow","orange"),

                      breaks = c("Fair", "Good", "Very Good","Premium","Ideal"),

                      labels = c("一般", "好", "很好", "高级", "理想"))

brewer 使用ColorBrewer的颜色

#palette参数调用色板
library(RColorBrewer)
#主要是palette参数调用色板
p + scale_fill_brewer() # 默认使用Blues调色板中的颜色(左)
p + scale_fill_brewer(palette = "Greens") #使用Greens调色板中的颜色 (右)
p + scale_fill_brewer(palette = "Greens",direction = -1)

grey 使用不同程度的灰色

#通过start end 两个参数指定,0为黑,1为白,都在0-1范围内

p + scale_fill_grey()  # 左图

#设定灰度范围

p + scale_fill_grey(start=1, end=0)  # 右图

p + scale_fill_grey(start=1, end=0.5)

1.4 更改连续型变量的颜色函数

#构建数据集
df <- data.frame(
x = runif(100),
y = runif(100),
z1 = rnorm(100)
)
p <- ggplot(df, aes(x, y)) + geom_point(aes(colour = z1))

gradient 创建渐变色#参数设定节点颜色

#设置两端颜色
p + scale_color_gradient(low = "white", high = "black")
#设置中间过渡色
p + scale_color_gradient2(low = "red", mid = "white", high = "blue")
#使用R预设调色板
p + scale_color_gradientn(colours =rainbow(10))
#legeng展示指定标签
p + scale_color_gradient(low = "white", high = "black",
                           breaks=c(1,2,0.5),
                           labels=c("a","b","c"))
#legend名称
p + scale_color_gradient("black", low = "white", high = "black",
                           limits=c(0.5,2))


distiller 使用ColorBrewer的颜色

#将ColorBrewer的颜色应用到连续变量上

p + scale_color_distiller(palette = "Spectral")

p + scale_color_distiller(palette = "Greens")

2 坐标轴标尺修改(x , y)

本部分主要是对坐标轴做如下改变,

  • 更改坐标轴名称
  • 更改x轴上标数的位置和内容
  • 显示对一个轴做统计变换
  • 只展示一个区域内的点
  • 更改刻度标签的位置

实现上面的这些可以使用scale_x等函数,同时像xlab这样的函数实现其中某一方面的功能,但是用起来更加方便

因为这里的数据也有连续和离散之分,所以也要使用不同的函数来实现。

# 横坐标是离散变量,纵坐标是连续变量
p <- ggplot(mtcars, aes(factor(cyl), mpg)) + geom_point()
# 更改坐标轴名称
p + scale_x_discrete("cyl")
# 更改横轴标度
p + scale_x_discrete(labels = c("4"="a","6"="b","8"="c"))
# 指定横轴顺序以及展示部分
p + scale_x_discrete(limits=c("6","4"))

# 连续变量可以更改标度(图与上相似,略)
p + scale_y_continuous("ylab_mpg")
p + scale_y_continuous(breaks = c(10,20,30))
p + scale_y_continuous(breaks = c(10,20,30), labels=scales::dollar)
p + scale_y_continuous(limits = c(10,30))
# 连续变量可以更改标度,还可以进行统计变换
p + scale_y_reverse() # 纵坐标翻转,小数在上面,大数在下面
p + scale_y_log10()
p + scale_y_continuous(trans = "log10")
p + scale_y_sqrt()
# 更改刻度标签的位置
p + scale_x_discrete(position = "top") +
  scale_y_continuous(position = "right")

注:除使用scale参数进行设置外,后面会介绍使用更简单易用的函数。

相关文章
Web Socket Client / UE4 / DTWebSocket 插件说明
Web Socket Client / UE4 / DTWebSocket 插件说明
449 1
|
存储 Kubernetes Cloud Native
云原生|kubernetes |一文带你搞懂pod调度策略,驱逐策略,污点、容忍调度(一)
云原生|kubernetes |一文带你搞懂pod调度策略,驱逐策略,污点、容忍调度
919 0
|
SQL 数据可视化 前端开发
Springboot 整合 xxljob 使用定时任务调度(新手入门篇)
Springboot 整合 xxljob 使用定时任务调度(新手入门篇)
2185 0
Springboot 整合 xxljob 使用定时任务调度(新手入门篇)
|
API 开发者 索引
Python中的省略号(Ellipsis)赋值方式
在Python中,省略号(`...`)是一种特殊对象,称为Ellipsis,虽不常用但在特定场景下非常实用,如函数占位、未实现方法示例及NumPy数组处理。本文通过示例介绍`a = ...`的用法。省略号类似于`None`,可用作代码结构的占位符,保持代码完整性和可读性,同时在API设计中标识待实现的方法。特别是在NumPy中,省略号用于表示多维数组的剩余维度,简化数组操作,提高代码灵活性和可读性。掌握这一技巧有助于提升Python编程能力。
398 1
|
机器学习/深度学习 算法 数据可视化
R语言K-Means(K-均值)聚类、朴素贝叶斯(Naive Bayes)模型分类可视化
R语言K-Means(K-均值)聚类、朴素贝叶斯(Naive Bayes)模型分类可视化
OpenCV-Python】滑动条Trackbar的创建和使用(createTrackbar())
该文章介绍了如何在OpenCV-Python中创建和使用滑动条(Trackbar)来动态调节参数,并通过实际代码示例演示了如何通过滑动条控制图像颜色。
|
机器学习/深度学习 数据可视化 TensorFlow
使用Python实现深度学习模型:图像语义分割与对象检测
【7月更文挑战第15天】 使用Python实现深度学习模型:图像语义分割与对象检测
367 2
|
人工智能 自然语言处理 测试技术
巨擘之舞:探索AI大模型的发展历程与特性比较
巨擘之舞:探索AI大模型的发展历程与特性比较
|
算法 数据可视化 计算机视觉
使用Python实现图像处理中的边缘检测算法
图像处理中的边缘检测是计算机视觉和图像识别领域的重要技术之一。本文将介绍如何利用Python语言实现常见的边缘检测算法,包括Sobel、Canny等,并结合实例演示其在图像处理中的应用。
550 16
|
算法 安全 Java
AES加解密算法:原理、应用与安全性解析
AES加解密算法:原理、应用与安全性解析