主题元素
大约有40多个不同的元素控制着图像的外观。它们大致可以分为5类:图像、坐标轴、图例、面板、分面
1. 图像元素
一些元素控制着图像的总体效果
元素 | 制定者 | 描述 |
---|---|---|
plot.background | element_rect() | 图像背景 |
plot.title | element_text() | 图像标题 |
plot.margin | margin() | 图像边距 |
plot.background绘制图像中最底那一层的矩形。ggplot2默认设置中使用白色背景,从而确保无论图像的最终效果是怎样的它都是可用的(比如说,即使保存成png,然后把图片放到一个黑色背景幻灯片上)。当在导出图像到其它地方的时候,也许想把背景设置成透明的,这时可以用fill = NA。 类似地,如果把图像嵌入到一个已经有边距的地方,也许想减少内置的边距。不过需要注意的是,如果想画一个边框的话,还是需要保留一个微小的边距的
base + theme(plot.background = element_rect(color = "grey50", size = 2))
base + theme(plot.background = element_rect(color = "grey50", size = 2), plot.margin = margin(2, 2, 2, 2))
base + theme(plot.background = element_rect(fill = "lightblue"))
2. 坐标轴元素
坐标轴元素控制着坐标轴的外观
元素 | 制定者 | 描述 |
---|---|---|
axis.line | element_line() | 平行于坐标轴的线条(默认主题中这是隐藏的) |
axis.text | element_text() | 坐标轴标签 |
axis.text.x | element_txt() | x轴标签 |
axis.text.y | element_text() | y轴标签 |
axis.title | element_text() | 坐标轴标题 |
axis.title.x | element_text() | x轴标题 |
axis.title.y | element_text() | y轴标题 |
axis.ticks | element_line() | 轴须标签 |
axis.ticks.length | unit() | 轴须标签的长度 |
需要注意的是,axis.text(和axis.title)有三种形式:axis.text、axis.text.x、axis.text.y。如果想要同时修改两个坐标轴,请使用第一种形式:所有没有在axis.text.x和axis.text.y显式设置的属性,都会从axis.text中继承
df <- data.frame(x = 1:3, y = 1:3)
base <- ggplot(df, aes(x, y)) + geom_point()
# 加重轴线
base + theme(axis.line = element_line(color = "grey50", size = 1))
# x轴和y轴的样式
base + theme(axis.text = element_text(color = "blue", size = 12))
# 对于长标签来说很有用
base + theme(axis.text.x = element_text(angle = -90, vjust = 0.5))
最常见的修正是通过旋转x轴标签来避免长标签之间的重叠。负角度和设置hjust = 0, vjust = 1可以修正这个问题
df <- data.frame(x = c("label", "a long label", "an even longer label"), y = 1:3)
base <- ggplot(df, aes(x, y)) + geom_point()
base
base + theme(axis.text.x = element_text(angle = -30, vjust = 1, hjust = 0)) + xlab(NULL) + ylab(NULL)
3. 图例元素
图例元素控制着所有图例的外观。guide_legend()或guide_colorbar()等函数也可以用来修改某元素的图例
元素 | 制定者 | 描述 |
---|---|---|
legend.background | element_rect() | 图例背景 |
legend.key | elemen_key() | 图例符号背景 |
legend.key.size | unit() | 图例符号大小 |
legend.key.height | unit() | 图例符号高度 |
legend.key.width | unit() | 图例符号宽度 |
legend.margin | unit() | 图例边距 |
legend.text | element_text() | 图例标签 |
legend.text.align | 0-1 | 图例标签对齐(0 = 右,1 = 左) |
legend.title | element_text() | 图例名 |
legend.title.margin | 0-1 | 图例标签对齐(0 = 右,1 = 左) |
下面的例子展示了这些选项的效果
df <- data.frame(x = 1:4, y = 1:4, z = rep(c("a", "b"), each = 2))
base <- ggplot(df, aes(x, y, color = z)) + geom_point()
base + theme(legend.background = element_rect(fill = "lemonchiffon", color = "grey50", size = 1))
base + theme(legend.key = element_rect(color = "grey50"), legend.key.width = unit(0.9, "cm"), legend.key.height = unit(0.75, "cm"))
base + theme(legend.text = element_text(size = 15), legend.title = element_text(size = 15, face = "bold"))
此外还有四种属性可以控制图例在图像中的布局(legend.position、legend.direction、legend.justification、legend.box)