本号的ggplot2系列推文已经更新了四篇,各位读者请依次阅读:

  • ggplot2语法入门

  • 几何对象函数:小提琴图、箱形图、抖动图

  • 颜色标度函数

  • 统计变换

本篇来介绍ggplot2绘图系统的坐标体系。共分为两部分,一是标度函数中的坐标标度函数,二是坐标系统函数。

library(ggplot2)
library(patchwork)

坐标标度函数

ggplot2的标度函数有多种类型,本系列会将其拆解进行介绍,前面已经介绍了颜色标度函数,本篇涉及到坐标标度函数,后续还计划专门出推文从整体上介绍标度函数。

x轴和y轴的标度函数类似,本文不作区别。与颜色标度函数一样,坐标标度函数也分为离散、连续和分箱等类型。

离散坐标标度

离散坐标标度对应的函数是scale_x_discrete(),它的语法结构如下:

scale_x_discrete(...,expand = waiver(),guide = waiver(),position = "bottom")

该函数的参数分为两类:...是离散标度函数的通用参数,其他参数是坐标标度函数的专门参数。

主要的通用参数有如下几个:

  • breaks:分割位置;对于坐标标度函数来说是坐标轴刻度位置;

  • limits:范围;对于坐标标度函数来说相当于基础绘图系统中的xlimylim参数;

  • name:名称;对于坐标标度函数来说是坐标轴名称;

  • labels:标签;对于坐标标度函数来说是坐标轴刻度标签,必须与breaks参数一一对应。

对比以下三幅图的区别:

p11 <- ggplot(mtcars, aes(factor(cyl))) +geom_bar()p12 <- p11 + scale_x_discrete(name = "cyl",breaks = c("4", "8"),labels = c("No.4", "No.8"))p13 <- p11 + scale_x_discrete(name = "cyl",limits = c("4", "8"))p11 + p12 + p13

  • 与图1相比,图2通过namebreakslabels参数调整了x轴的名称、刻度位置、刻度标签;

  • 与图1相比,图3通过limits参数限定了变量的取值范围,范围外的样本会被从绘图数据中去除。

专门参数如下:

  • expand:坐标轴两侧的空隙,格式为包含两个元素的向量;

  • guide:图例参数;

  • position:坐标轴的位置;对于x轴有top、bottom两种,y轴有left、right两种。

p14 <- p11 + scale_x_discrete(expand = c(0,0))
p15 <- p11 + scale_x_discrete(position = "top")p14 + p15

连续坐标标度

连续坐标标度对应的函数是scale_x_continuous(),语法结构如下:

scale_x_continuous(name = waiver(),breaks = waiver(),minor_breaks = waiver(),n.breaks = NULL,labels = waiver(),limits = NULL,expand = waiver(),oob = censor,na.value = NA_real_,trans = "identity",guide = waiver(),position = "bottom",sec.axis = waiver()
)

连续标度函数与离散标度函数有一些共同参数,此外还有如下特有参数:

  • minor_breaks:次级刻度的位置;

  • n.breaks:breaks参数的替代参数,指定坐标轴刻度的数目。

p31 <- ggplot(mtcars, aes(mpg, drat)) + geom_point()p32 <- p31 + scale_x_continuous(limits = c(15, 30),breaks = seq(15, 30, 3))p33 <- p31 + scale_x_continuous(limits = c(15, 30),n.breaks = 4)p34 <- p31 + scale_x_continuous(limits = c(15, 30),n.breaks = 4,labels = LETTERS[1:4])(p31 + p32) / (p33 + p34)

  • trans:变换参数,变换后坐标轴刻度不再是顺序、等间隔的了;可选项有asn、atanh、boxcox、date、exp、hms、identity、log、log10、log1p、log2、logit、modulus、probability、probit、pseudo_log、reciprocal、reverse、sqrt、time。

此外,还有如下三个快捷转换函数:

scale_x_log10()
scale_x_reverse()
scale_x_sqrt()

示例如下:

p35 <- p31 + scale_x_continuous(trans = "reverse")
p36 <- p31 + scale_x_continuous(trans = "log10")
p37 <- p31 + scale_x_reverse()
p38 <- p31 + scale_x_log10()(p35 + p36)/(p37 + p38)

分箱坐标标度

分箱坐标标度对应的函数是scale_x_binned(),该函数会将对应的连续变量分割成若干段。

p41 <- ggplot(mtcars, aes(mpg, drat)) + geom_point() +scale_x_binned(n.breaks = 5, show.limits = T)p42 <- ggplot(mtcars, aes(mpg)) + geom_bar()+scale_x_binned(n.breaks = 5)p41 + p42

时间坐标标度

当x或y轴对应的是时间类型变量时,需要使用时间坐标标度函数对其进行调整。R语言中的时间变量有3种类型,对应的时间坐标标度函数分别如下:

scale_x_date() # Date
scale_x_datetime() # POSIXct
scale_x_time() # hms

时间类型变量有专门的处理工具包,本篇暂不介绍。

labs()/lims()

当只需要设置坐标轴的标签或范围时,可以使用labs()lims()函数进行快捷设置。

标签函数:

labs(...,title = waiver(),subtitle = waiver(),caption = waiver(),tag = waiver()
)xlab(label)
ylab(label)
ggtitle(label, subtitle = waiver())

范围函数:

lims(...)
xlim(...)
ylim(...)

标签函数在前篇已经介绍,具体见语法入门第3部分(绿色字体可点击);

范围函数见本篇下文。

坐标系统函数

坐标系统函数是ggplot2绘图系统的一个组件,该类函数以coord_开头进行命名。

coord_cartesian()

默认坐标系统是笛卡尔坐标系,对应的函数是coord_cartesian()

coord_cartesian(xlim = NULL,ylim = NULL,expand = TRUE,default = FALSE,clip = "on"
)

该函数的主要参数有xlimylimexpand

  • expand参数类似坐标标度函数中的同名参数,但它是逻辑型参数,默认TRUE表示在坐标轴两侧留出间隔;

  • xlimylim参数类型坐标标度函数中的limits参数,但有所不同。

观察下面三幅图:

p51 <- ggplot(mtcars, aes(mpg, drat)) + geom_point()p52 <- p51 + scale_x_continuous(limits = c(15, 30)) +scale_y_continuous(limits = c(3, 4))p53 <- p51 + lims(x = c(15, 30),y = c(3, 4))p54 <- p51 + coord_cartesian(xlim = c(15, 30), ylim = c(3, 4))p52 + p53 + p54

  • 对比图1和图2可以看出,范围函数lims()和坐标标度函数中的limits参数功能完全一致;

  • 由于默认状态下坐标轴两侧会留出间隙,图1中间隙位置的点不会显示,而图3中这部分的点依然会显示。

coord_fixed()

该函数通过ratio参数控制y轴和x轴单位长度的实际比例,相当于基础绘图系统中plot()函数的asp参数,默认状态下等同coord_equal()函数:

coord_fixed(ratio = 1,xlim = NULL,ylim = NULL,expand = TRUE,clip = "on")

示例如下:

p51 + coord_fixed(ratio = 5)

coord_flip()

该函数用于将x、y坐标轴的位置对调,其他同coord_cartesian()函数:

coord_flip(xlim = NULL,ylim = NULL,expand = TRUE,clip = "on")

示例如下:

p51 + coord_flip()

coord_polar()

该函数对应的是极坐标系:

coord_polar(theta = "x",start = 0, direction = 1,clip = "on")
  • theta:指定将哪个变量作为极坐标的角度参数;可选项有x、y;

  • start:起点的角度位置,默认值0表示12点钟位置;

  • direction:旋转方向;1表示顺时针,-1表示逆时针。

以下例子来自官方帮助文档。通过转换坐标系,可以将柱状图转换为同心圆图和扇形图:

p61 <- ggplot(mtcars, aes(x = factor(1), fill = factor(cyl))) + geom_bar(width = 1)p62 <- p61 + coord_polar()p63 <- p61 + coord_polar(theta = "y")p62 + p63

coord_trans()

该函数类似连续坐标标度函数中的trans参数:

coord_trans(x = "identity",y = "identity",xlim = NULL,ylim = NULL,clip = "on",expand = TRUE
)

该函数与trans参数的转换原理不同:trans参数是先转换数据、再绘图;coord_trans()函数是先绘图后转换坐标系。

具体见以下示例:

set.seed(123)
df <- data.frame(x = 1:10, y = c(1:10) + rnorm(10))p71 <- ggplot(df, aes(x, y)) + geom_point() +geom_smooth(method = "lm")p72 <- p71 + scale_x_log10() +geom_smooth(method = "lm")p73 <- p71 + coord_trans(x = "log10") +geom_smooth(method = "lm")p71 + p72 + p73

如上图所示,使用线性模型对散点进行拟合,但是图3拟合出的视觉效果并非直线:

  • 图1和图3使用的模型形式都为,但由于图3进行了对数转换,原先的直线被扭曲成了指数曲线;

  • 图2使用trans参数先对数据进行了转换,模型形式实际是,因此在对数转换后的坐标系中仍然是直线。

ggplot2 | 坐标标度函数、坐标系统函数相关推荐

  1. R语言ggplot2可视化:使用scale_y_continous函数自定义指定Y轴的坐标范围以及对应的数值、将坐标轴的数值设置为需要的数据类型(整型、浮点型)

    R语言ggplot2可视化:使用scale_y_continous函数自定义指定Y轴的坐标范围以及对应的数值.将坐标轴的数值设置为需要的数据类型(整型.浮点型) 目录

  2. R语言ggplot2可视化:使用geom_line函数将dataframe中数据可视化为时间序列(或折线图)(Time Series Plot From a Data Frame)、添加标题、副标题

    R语言ggplot2可视化:使用geom_line函数将dataframe中数据可视化为时间序列(或折线图)(Time Series Plot From a Data Frame).添加标题.副标题. ...

  3. R语言使用ggplot2包的快速可视化函数qplot绘制基础密度图实战

    R语言使用ggplot2包的快速可视化函数qplot绘制基础密度图实战 目录 R语言使用ggplot2包的快速可视化函数qplot绘制基础密度图实战 #仿真数据

  4. R语言使用ggplot2包的快速可视化函数qplot绘制分组点图(带状图)并配置分组颜色实战

    R语言使用ggplot2包的快速可视化函数qplot绘制分组点图(带状图)并配置分组颜色实战 目录 R语言使用ggplot2包的快速可视化函数qplot绘制分组点图(带状图)并配置分组颜色实战 #仿真 ...

  5. R语言使用ggplot2包的快速可视化函数qplot绘制分组箱图(jitter、分组颜色配置)实战

    R语言使用ggplot2包的快速可视化函数qplot绘制分组箱图(jitter.分组颜色配置)实战 目录 R语言使用ggplot2包的快速可视化函数qplot绘制分组箱图(jitter.分组颜色配置) ...

  6. R语言使用ggplot2包的快速可视化函数qplot绘制密度图(主题、轴标签设置)实战

    R语言使用ggplot2包的快速可视化函数qplot绘制密度图(主题.轴标签设置)实战 目录 R语言使用ggplot2包的快速可视化函数qplot绘制密度图(主题.轴标签设置)实战 #仿真数据

  7. R语言使用ggplot2包的快速可视化函数qplot绘制散点图实战

    R语言使用ggplot2包的快速可视化函数qplot绘制散点图实战 目录 R语言使用ggplot2包的快速可视化函数qplot绘制散点图实战 #仿真数据

  8. R语言使用ggplot2包的快速可视化函数qplot绘制基础直方图实战

    R语言使用ggplot2包的快速可视化函数qplot绘制基础直方图实战 目录 R语言使用ggplot2包的快速可视化函数qplot绘制基础直方图实战 #仿真数据

  9. R语言ggplot2可视化:使用geom_smooth函数基于lm方法为每个分组的部分数据(subset data)拟合趋势关系曲线、对指定范围的数据拟合曲线

    R语言ggplot2可视化:使用geom_smooth函数基于lm方法为每个分组的部分数据(subset data)拟合趋势关系曲线.对指定范围的数据拟合曲线 目录

最新文章

  1. java.lang.StackOverflowError 解决方法
  2. c语言一元二次方程 ii(分支嵌套),C程序设计——求一元二次方程算法
  3. 原生Java高仿抖音短视频APP双端源码
  4. matlab连通区边界_Matlab图像处理学习笔记(一):二值化、开操作、连通区域提取、重心、ROI...
  5. 父元素onmouseover触发事件在父子元素间移动不停触发的问题
  6. 强类型数据集DataSet入门1
  7. apple quicktime怎么在ppt中用_只添加一个色块,你也能做出高大上的PPT排版
  8. Linux 脚本编写基础(三)
  9. python通过多进程实行多任务
  10. php模拟表单提交,php用fsockopen()函数实现模拟提交表单。
  11. SQLite: 取某年份的数据
  12. prlooks插件下载_ae looks插件下载
  13. css3 呼吸的莲花_心肾呼吸法—莲花能量冥想*
  14. 关于工作后定居城市的思考以及房价预测【zz】
  15. tkinter如何绑定鼠标和键盘等事件
  16. 小程序支付,详细过程
  17. 富士康小米们的印囧之路
  18. 第二阶段 筑基期(4-6 周,每周 8-10 小时)- 1
  19. 五年时间,Transformer宇宙发展成了这样,ChatGPT 只是其中之一
  20. 小学算术运算测试c语言,用C语言制作一个小学算术运算测试

热门文章

  1. SACC2019架构师大会PPT合集
  2. Quartz学习总结(2)——定时任务框架Quartz详解
  3. 内存条上面参数详解_「内存」新旧光威16GB内存条参数对比,发现镁光颗粒
  4. 一分钟看懂mysql_冬天发财树“最怕”它,遇上就烂根,一分钟看懂就能养好
  5. Spark源码阅读——DirectInputDStream
  6. 【Python】range和xrange区别
  7. spring cloud 资源
  8. “租房帮”产品体验报告
  9. Android系统onKeyDown监控/拦截/监听/屏蔽返回键、菜单键和Home键
  10. 如何安装Windows7多语言支持