可视化学习笔记(六):ggplot2:坐标轴


1、坐标轴设置

1.1 坐标轴转换

使用coord_flip()函数来将坐标轴翻转

  • 当反转坐标轴后各项排列顺序发生改变时,如果x是因子变量,可以使用以下函数调整:
    • scale_x_discrete()函数
    • limits=rev(levels(...))函数(为上一函数的选项)

1.2 连续型坐标轴值域

使用xlim()ylim()函数即可限定坐标轴的取值范围

  • ylim()限定范围是scale_y_continuous()的便捷写法,一般表达时二者等价
ylim(0, 10)
scale_y_continuous(limits=c(0, 10))

但如果需要设定scale_y_continuous的其他参数时,同时使用二者会产生其他未知情况;
因此,除了设定坐标轴范围需要外,如还需要调整其他属性,最好一律在scale_y_continuous()内进行

  • 当通过修改坐标轴标度来修改值域时,任何在范围以外的数据都会被移除,最后会展示经过修剪后的图形
  • 当通过坐标轴变换修改值域,数据不会被修建,只是将范围放大或缩小;
scale_y_continuous(limits=c(5, 6.5))
coord_cartesian(ylim=c(5,6.5))
  • 如果只想单向扩展值域可以使用expand_limits(y=#)函数,但却不能用于缩减值域

2、坐标轴修改

2.1 反转坐标轴

对于连续坐标轴,可以通过scale_*_reverse()函数来反转;或者通过限定值域(先写最大值,再写最小值)来调整

  • 但需要注意的是scale_*_reverse()函数与scale_*_continuous()函数类似,不能与*lim()函数搭配使用

2.2 修改项目顺序

对于离散型坐标轴,可以通过scale_*_discrete()函数中的limits参数来手动修改,类似于factor()函数中的level参数

  • 如果需要反转项目,则需要设定`limits=rev(level(factor))

2.3 坐标轴比例缩放

使用coord_fixed()可以对坐标轴进行缩放

  • 如果希望两坐标轴之间为固定缩放比例,可以使用ratio=#参数

2.4 坐标轴标签修改

修改坐标轴标签的方法有以下几种:

  1. 使用xlabylab函数可以为坐标轴添加文本标签
  2. 通过labs函数来设定
  3. 使用scale的其他函数中的name参数来设定

2.5 移除坐标轴

使用theme(axis.title.* = element_text()来处理

2.6 修改坐标轴标签外观

和修改刻度标签外观一样,通过使用element_text()函数及其参数来设定即可

2.5 添加坐标轴直线

在ggplot2中坐标轴的框线一般都绘成白色隐去,如果需要绘制坐标轴线,可以使用axis.line = element_line(colour='black')来绘制

  • 使用最初主题样式通过函数theme_bw()来实现

2.6 对数坐标轴

使坐标轴呈对数显示可以通过以下方法:

  1. 对坐标轴变量取对数后再映射到坐标轴上
  2. 使用scale_*_log10()函数

2.7 在坐标轴上使用日期

如果需要绘制时间序列,只要将类型为Date的变量映射到坐标轴即可

  • ggplot2可以处理两类时间相关的对象:
    • 日期对象(Date):表示日期,分辨率为一天
    • 日期时间对象(POSIXt):表示时刻,分辨率精确到秒的小小数部分

对于日期分割点可以通过以下方法来实现:

  1. 通过创建一个新的二分变量来进行映射
  2. 使用seq()函数来时间
datebreaks <- seq(as.Date("1992-06-01"), as.Date("1993-06-01"), by="2 month")

3、刻度线设置

3.1 设置刻度线位置

设置刻度线只需要使用标度中的参数breaks=即可

  • 刻度线位置决定主网格线的位置:
    1. 如果坐标轴为连续型变量,那么颜色更暗且没有标签的次网络格将被默认绘制在两个主网格线的正中间位置
    2. 如果坐标轴为离散型变量,则默认会为每个项目生成一条刻度线
      • 可以通过limits参数修改或移除项目
      • breaks决定为哪些水平加上标签(相当于factor()函数中的label参数)

3.2 移除刻度线和标签

移除刻度线标签需使用theme(axis.text.* = element_blank())函数以及选项

  • 这种方法无论是离散型还是连续型均有效

移除刻度线则使用theme(axis.ticks = element_blank())函数及选项

  • 但无法仅隐藏单个坐标轴刻度

刻度标签、刻度线和网格线的控制根据坐标轴类型而有所不同:

  • 连续型坐标轴,使用scale_*_continuous=(break)参数来控制,当breaks=NULL时,三个项目都不会被绘制
  • 离散型坐标轴,使用limits参数控制

3.3 修改刻度标签文本

如果想要使得坐标轴的刻度映射标签,使用像使用factor()函数一样使用scale_*_continuous()函数来进行操作:

hwp <- ggplot(heightweight, aes(x=ageYear, y=heightIn)) + 
  geom_point()
hwp
hwp + scale_y_continuous(breaks=c(50, 56, 60, 66, 72),
                         labels=c("Tiny", "Really\nshort", "Short",
                                  "Medium", "Tallish"))
  • breaks参数相当于level
  • \n表示换行符,使系统将'Really'和'short'以两行的形式转换

3.4 修改刻度标签的外观

对于刻度标签样式的修改,可以通element_text()函数来修改

element_text(angle=#, hjust=#, vjust=#, 
    family='', face='', colour='', size=#)
  • angle表示角度
  • hjustvjust分别表示横向对与纵向对其
  • familyface表示字体族和样式(粗体/斜体等)

4、绘制环状图

绘制思路:

  1. 先绘制直方图
  2. 使用coord_polar()函数旋转
  3. 再通过scale_x_continuous()函数中的limits=c(0, 360))参数来设定360度
ggplot(wind, aes(x=DirCat, fill=SpeedCat)) +
  geom_histogram(binwidth=15, origin=-7.5) +
  coord_polar() +
  scale_x_continuous(limits=c(0,360))

你可能感兴趣的:(可视化学习笔记(六):ggplot2:坐标轴)