ggplot2-主题1

简介

在本章中学会如何使用ggplot2主题(theme)系统,主题系统允许对于图像中的非数据元素进行精细的调整。它不会影响几何对象和标度等数据元素。主题不能改变图像的感官性质,但它可以使图像变得更具美观,满足整体一致性的要求。主题的控制包括字体、轴须标签(tick)、面板的条状区域(strip)、背景等

lattice和基础图形系统没有采用数据和非数据控制分离的方法,大部分函数都设定了许多参数来调整数据和非数据的外观,这很容易导致函数的复杂化,使得图像的学习变得更为困难。ggplot2则采用了不同的策略:绘图时,首先确定数据如何展示,之后再用主题系统对细节进行渲染

主题系统由四个主要部分组成

  1. 主题元素(element)制定了能控制的非数据元素。比如说,plot.title元素控制了图像标题的外观;axis.ticks.x指的是x轴上的标签;legend.key.height则是图例符号的高度
  2. 每一个元素都和一个元素函数(element function)绑定,元素函数表述了元素的视觉属性。比如,element_text()设定了字体大小、颜色,还有像plot.title()等文字元素的外观
  3. theme()函数允许通过运行元素函数来覆盖默认的主题函数,比如说theme(plot.title = element_text(color = “red”))
  4. 像theme_grey()那样的完整的主题。主题把所有的主题元素的值设置得和谐共存

比如,假设对数据创建了以下图像

base <- ggplot(mpg, aes(cty, hwy, color = factor(cyl))) +
	geom_jitter() +
	geom_abline(color = "grey50", size = 2)

base

在这里插入图片描述

它达到了想要的效果:得知了cty和hwy高度相关,它们两者都和cyl有着强联系,而且hwy总是比cty要大(此外cty增大的话两者差值也会增大)
如果想要将图像作为论文发表,需要稍微修改一下它

  • 改善坐标轴和图例标签的效果
  • 为图像添加标题
  • 微调颜色比例
labelled <- base + 
	labs(x = "City mileage/gallon", y = "Highway mileage/gallon", color = "Cylinders", title = "Highway and city mileage are highly correlated") + scale_color_brewer(type = "seq", palette = "Spectral")

labelled

在这里插入图片描述

接下来,需要确保图像样式和期刊样式保持一致

  • 背景是白色的,而不是浅灰色的
  • 如果有空位的话,图例应该放在图像里面
  • 主要的网格线应该是浅灰色的,次要的网格线应该被移除
  • 图像标题应该是12磅的加粗字体
styled <- labelled +
	theme_bw() +
	theme(plot.title = element_text(face = "bold", size = 12), 
	legend.background = element_rect(fill = "white", size = 4,
	color = "white"), legend.justification = c(0, 1),
	legend.position = c(0, 1),
	axis.ticks = element_line(color = "grey70", size = 0.2),
	panel.grid.major = element_line(color = "grey70", size = 0.2),
	panel.grid.minor = element_blank())
styled

在这里插入图片描述

最后,期刊想要600打印分辨率(dpi)的TIFF图像文件。将会在存储输出中了解到ggsave()的细节

完整的主题

ggplot2自带了很多内置主题。最重要的一个是theme_grey(),它是ggplot2的标志性主题,有着浅灰色背景和白色网格线

  1. theme_bw():theme_grey()的变种,使用了白色背景和细灰色网格线
  2. theme_linedraw():这个主题的线条只有黑色,但是线条有不同的宽度,背景是白色的,让人联想起素描的风格
  3. theme_light():类似theme_linedraw(),但是有着浅灰色的线条和坐标轴,让人更多地把注意力放在数据上面
  4. theme_dark():theme_light()的暗色风格版本,有着类似的线条大小,但是背景是灰暗色的。当想让彩色线条更加突出的时候这个主题特别有用
  5. theme_minimal():简约风格主题,没有背景标注
  6. thme_classic():经典风格主题,没有x轴和y轴线条及网格线
  7. theme_void():完全空白的主题
df <- data.frame(x = 1:3, y = 1:3)
base <- ggplot(df, aes(x, y)) + geom_point()
base + theme_grey() + ggtitle("theme_grey()")
base + theme_bw() + ggtitle("theme_bw()")
base + theme_linedraw() + ggtitle("theme_linedraw()")
base + theme_light() + ggtitle("theme_light()")
base + theme_dark() + ggtitle("theme_dark()")
base + theme_minmal() + ggtitle("theme_minimal()")
base + theme_classic() + ggtitle("theme_classic()")
base + theme_void() + ggtitle("theme_void()")

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

所有主题都有base_size参数,这个参数控制着基础字体大小。基础字体大小是所有坐标轴标题都会使用到的:图像标题通常来说回稍微大一些(1.2倍),轴须和条状区域的标签通常稍微小一点(0.8倍)。如果想分别控制这些字体大小,需要如下文所述那样分别修改单独的元素

除了在图像上套用完整的主题,还可以用theme_set()来修改默认主题的效果。如果不喜欢默认的灰色背景,可以运行theme_set(theme_bw())来把所有图像的背景都设为白色
除了ggplot2所内置的,还能使用其它的主题,比如ggthemes

library(ggthemes)
base + theme_tufte() + ggtitle("theme_tufte()")
base + theme_solarized() + ggtitle("theme_solarized()")
base + theme_excel() + ggtitle("theme_excel()")

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

完整的主题是一个很好的出发点,但是它们没有提供很多的控制细节,如果想修改某个元素,将会用到theme(),并且通过元素函数来覆盖某个元素的默认设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值