R绘图 | 快速入门ggplot2
0. 前言
❝在正式介绍ggplot2绘图之前,我们先来介绍一下ggplot2的绘图框架,以便后面介绍时更容易理解。一般来说,ggplot2绘图框架分为:图层、几何对象、映射、标度和主题。 本次以散点图为例简略带领大家快速了解ggplot2的绘图逻辑,更详细内容后面我们会一一推送。 ❞
1. 加载与安装包
安装并加载绘图所需的R包ggplot2
。
# 安装ggplot2
install.packages("ggplot2")
# 加载ggplot2
library(ggplot2)
2. 载入绘图数据
本次演示我们以R自带的数据集diamonds
为例进行绘图,由于数据量比较大我们使用tidyverse
随机抽取1000
条数据进行演示。
# 载入数据
data("diamonds")
# 抽取1000条数据
library(tidyverse)
test_data <- sample_n(diamonds,1000)
# 查看数据
head(test_data)
# A tibble: 6 x 10
carat cut color clarity depth table price x y z
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 1.27 Very Good H SI1 62.3 58 7125 6.87 6.94 4.3
2 0.3 Ideal G IF 61.9 55 863 4.33 4.36 2.69
3 1.09 Ideal D SI2 61.7 59 5410 6.64 6.62 4.09
4 0.7 Premium F SI1 59.4 60 2239 5.77 5.74 3.42
5 0.71 Premium F SI2 62.2 57 2040 5.66 5.6 3.5
6 1.08 Fair E SI1 53.8 63 4790 6.99 6.81 3.71
3. 绘图
3.1 创建画布
通过在ggplot
函数内使用data=
指定绘图数据
,通过aes
进行映射,指定x轴和y轴
;
theme_bw()
函数用于设置主题。
ggplot(data = test_data,aes(x = carat,y = price)) + theme_bw()
3.2 添加几何对象
在这里以geom_point()
指定几何图层(散点图),出现图形元素。
ggplot(data = test_data,aes(x = carat,y = price)) +
geom_point() +
theme_bw()
3.3 为几何对象添加映射
我们可以通过在geom_point()
中使用aes()
函数为点添加新的映射。
在这里我们将cut
这个分类变量
映射给color
。
ggplot(data = test_data,aes(x = carat,y = price)) +
geom_point(aes(color = cut)) +
theme_bw()
当然不通过aes()映射
的话,我们也可以直接color =
指定点的颜色。
p1 <- ggplot(data = test_data,aes(x = carat,y = price)) +
geom_point(color = "red") +
theme_bw()
3.4 使用标度控制映射
3.4.1 使用标度控制颜色
标度(scale)
可以控制映射的属性,ggplot2中内置了很多标度
;
在这里我们使用ggsci
包中的标度scale_color_d3()
来控制color
属性,改变cut
的默认颜色。
# 安装加载包
installed.packages("ggsci")
library(ggsci)
# 使用scale控制颜色属性
ggplot(data = test_data,aes(x = carat,y = price)) +
geom_point(aes(color = cut)) +
scale_color_d3() +
theme_bw()
3.4.2 使用标度控制点
R中常用的点的形状
如下图所示,默认时使用16号
形状。
这里我们使用mtcars
这个数据集进行演示。
在这里我们首先在aes()外
使用shape
指定使用21号形状
(该点内部为空
,可以使用颜色进行填充);通过alpha
指定点的透明度
;
再在aes()内
部将drat
映射给size
;通过factor()
将连续变量cyl
转换为因子
后将其映射给fill
;
最后使用scale_size
设置点的大小范围
,使用scale_fill_npg()
设置点的内部填充色
。
ggplot(mtcars,aes(x =wt ,y = mpg)) +
geom_point(shape = 21,alpha = 0.6,aes(size = drat,fill = factor(cyl))) +
scale_size(range = c(1,10)) +
scale_fill_npg() +
theme_bw()
2.4.3 使用标度控制刻度
当x,y为连续性变量
时,我们分别可以通过scale_x_continuous
和scale_y_continuous
来控制x轴
和y轴
;
通过breaks=seq()
控制刻度范围
,labels=c()
设置刻度内容
。
ggplot(mtcars,aes(x =wt ,y = mpg)) +
geom_point(shape = 21,alpha = 0.6,aes(size = drat,fill = factor(cyl))) +
scale_size(range = c(1,10)) +
scale_fill_npg() +
scale_x_continuous(breaks = seq(0,6,0.5))+
scale_y_continuous(breaks = seq(0,40,10),labels=c("0 M/US","10 M/US","20 M/US","30 M/US","40 M/US")) +
theme_bw()
2.5 通过labs设置标题
通过在labs()
内指定title=
设置主标题
,x=
设置x轴名
,y=
设置y轴名
,size=
和fill=
分别对应了geom_point
中的aes(size
= drat,fill
= factor(cyl))用来设置图例名
。
ggplot(mtcars,aes(x =wt ,y = mpg)) +
geom_point(shape = 21,alpha = 0.6,aes(size = drat,fill = factor(cyl))) +
scale_size(range = c(1,10)) +
scale_fill_npg() +
scale_x_continuous(breaks = seq(0,6,0.5))+
scale_y_continuous(breaks=seq(0,40,10),labels=c("0 M/US","10 M/US","20 M/US","30 M/US","40 M/US")) +
labs(title = "mtcars",x = "Weight (1000 lbs)",y = "Miles/(US) gallon",size = "Displacement (cu.in.)",fill = "Number of cylinders") +
theme_bw()
2.6 美化主题
我们可以通过在theme()
内使用plot.title
修改主标题属性
,axis.title
可以同时修改x和y轴标签属性
,legend.position
可以修改图例位置
。
需要注意的是,这部分代码需要放在theme_bw()
后,否则则无法生效。
ggplot(mtcars,aes(x =wt ,y = mpg)) +
geom_point(shape = 21,alpha = 0.6,aes(size = drat,fill = factor(cyl))) +
scale_size(range = c(1,10)) +
scale_fill_npg() +
scale_x_continuous(breaks = seq(0,6,0.5))+
scale_y_continuous(breaks=seq(0,40,10),labels=c("0 M/US","10 M/US","20 M/US","30 M/US","40 M/US")) +
labs(title = "mtcars",x = "Weight (1000 lbs)",y = "Miles/(US) gallon",size = "Displacement (cu.in.)",fill = "Number of cylinders") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5,size = 20),axis.title = element_text(size = 15),legend.position = "top")
除此之外,我们还可以通过ggThemeAssist
包美化主题。
# 安装
install.packages("ggThemeAssist")
# 加载
library(ggThemeAssist)
① 安装加载后,我们首先需要选中需要加载的代码
,点击如图所示的位置ggplot Theme Assistant
进行修改主题。
② 如图所示,手动修改选项参数即可,完成点击右上角done
即可加载新代码。
本次内容旨在抛砖引玉
,更详细的内容后续会推送。
相关文章
- 什么是4D成像雷达
- TJ4DRadSet:自动驾驶4D成像雷达数据集
- RadarSLAM:可用于全天候的大规模场景的毫米波雷达SLAM
- 使用 OpenCV 的基于标记的增强现实
- M2DP:一种新的三维点云描述子及其在回环检测中的应用
- 使用 CLIP 对没有任何标签的图像进行分类
- CloudCompare中CCCoreLib模块介绍
- 即将开源STD:用于3D位置识别的稳定三角形描述子
- 单测在商家前端业务中的实践
- LOCUS 2.0:基于激光雷达的鲁棒且高效的3D实时建图
- 简析CloudCompare文件夹之间的关系
- 视觉在自动泊车系统中的设计与实现和挑战综述
- 八种常用激光雷达和视觉SLAM算法的评估与比较
- SL sensor :一种基于结构光传感器开源且实时用于高精度建筑机器人重建应用方案
- ROS2中零拷贝实现进程内节点之间的高效通信
- 多视觉异步SLAM系统
- AI赋能智能交通“车路协同”场景,实现“聪明的车、智慧的路”!
- maplab 2.0 多模态模块化建图框架
- 基于全景相机的深度学习综述
- LOAM论文和程序代码的解读