修改主题组件
如果想修改单个主题组件,需要使用形如如plot_theme(element.name = element_function())的代码
内置元素函数有4种基本类型:文字(text)、线条(line)、矩形(rectangle)、空白(blank)。每个元素函数都有一系列控制外观的参数
- element_text()绘制标签和标题。可以控制字体的family(字体族)、face(字型)、color(颜色)、size(大小,单位是“磅”)、hjust(横向对齐)、vjust(竖向对齐)、angle(角度,单位是“角度”而不是“弧度”)、lineheight(行高,与fontcase的比例)。可查阅viegnette(“ggplot2-specs”)获得更多的参数细节
base_t <- base +
labs(title = "This is a ggplot") + xlab(NULL) + ylab(NULL)
base_t + theme(plot.title = element_text(size = 16))
base_t + theme(plot.title = element_text(face = "bold", color = "red"))
base_t + theme(plot.title = element_text(hjust = 1))
margin参数和margin()函数可用于控制字体周围的边距。mergin()有四个参数:文字上边(top)、右边(right)、下边(bottom)、左边(left)的空白大小(多少磅)。没有设置的元素默认值为0
# 这里的边距看起来不对称,这是因为图像本身也有边距
base_t + theme(plot.title = element_text(margin = margin()))
base_t + theme(plot.title = element_text(margin = margin(t = 10, b = 10)))
base_t + theme(axis.title.y = element_text(margin = margin(r = 10)))
- element_line()绘制线条,线条的参数有color(颜色)、size(大小)和linetype(线条类型)
base + theme(panel.grid.major = element_line(color = "black"))
base + theme(panel.grid.major = element_line(size = 2))
base + theme(panel.grid.major = element_line(linetype = "dotted"))
- element_rect()绘制矩形。这主要用于绘制背景,参数有fill(填充)的颜色、边缘的color(颜色)、size(大小)、linetype(线条类型)
base + theme(plot.background = element_rect(fill = "grey80", color = NA))
base + theme(plot.background = element_rect(color = "red", size = 2))
base + theme(panel.background = element_rect(fill = "linen"))
- element_blank()不绘制任何东西。如果不想绘制任何东西,而且没有分配给哪个元素的空间的话,可以使用此函数。以下例子使用element_blank()来逐步消除不感兴趣的元素。请留意图像是如何自动回收这些元素之前所用的空间的;如果不想要这种效果(或许是因为它们需要对齐页面的其它图像),可用color = NA, fill = NA来创建不可见元素来占用那些空间
- 一些其它的参数用于设定网格单位。例如unit(1, “cm”)或unit(0.25, “in”)
使用theme_update()来修改所有的未来生成的图像。它输出之前的主题设定值,因此可以在完成工作后很容易地恢复原来的参数
old_theme <- theme_update(
plot.background = element_rect(fill = "lightblue3", color = NA),
panel.background = element_rect(fill = "lightblue", color = NA),
axis.text = element_text(color = "linen"),
axie.title = element_text(color = "linen"))
base
theme_set(old_theme)
base