1. 面板元素
面板元素控制图像面板的外观
元素 | 制定者 | 描述 |
---|---|---|
panel.background | element_rect() | 面板背景(数据下面) |
panel.border | element_rect() | 面板边界(数据上面) |
panel.grid.major | element_line() | 主网格线 |
panel.grid.major.x | element_line() | 竖直主网格线 |
panel.grid.major.y | element_line() | 水平主网格线 |
panel.grid.minor | element_line() | 次网格线 |
panel.grid.minor.x | element_line() | 竖直次网格线 |
panel.grid.minor.y | element_line() | 水平次网格线 |
aspect.ratio | 数值 | 图像宽高比 |
panel.background和panel.border的主要不同点在于,背景(前者)绘制在数据的下面一层,边界(后者)绘制在数据的上面一层。因此,在覆盖panel.border的时候,总是需要设定fill = NA
base <- ggplot(df, aes(x, y)) + geom_point()
# 修改背景
base + theme(panel.background = element_rect(fill = "lightblue"))
# 微调主网格线
base + theme(panel.grid.major = element_line(color = "grey60", size = 0.8))
# 只关注一个方向的网格线
base + theme(panel.grid.major.x = element_line(color = "grey60", size = 0.8))
base2 <- base + theme(plot.background = element_rect(color = "grey50"))
# 宽的
base2 + theme(aspect.ratio = 9/16)
# 长瘦型的
base2 + theme(aspect.ratio = 2/1)
# 正方形的
base2 + theme(aspect.ratio = 1)
2. 分面元素
以下主图元素和分面有关
元素 | 制定者 | 描述 |
---|---|---|
strip.background | element_rect() | 分面标签背景 |
strip.text | element_text() | 条状文本 |
strip.text.x | element_text() | 水平条状文本 |
strip.text.y | element_text() | 竖直条状文本 |
panel.spacing | unit() | 分面间边距 |
panel.spacong.x | unit() | 竖直分面边距 |
panel.spacing.y | unit() | 水平分面边距 |
元素strip.text.x会影响到facet_wrap()或facet_grid();而strip.text.y只会影响到facet_grid()
df <- data.frame(x = 1:4, y = 1:4, z = c("a", "a", "b", "b"))
base_f <- ggplot(df, aes(x, y)) +
geom_point() + facet_wrap(~z)
base_f
base_f + theme(panel.spacing = unit(0.5, "in"))
base_f + theme(strip.background = element_rect(fill = "grey20", color = "grey80", size = 1), strip.text = element_text(color = "white"))
3. 存储输出
若要保存图像到另外一个程序中使用,有两种基本的输出类型可共选择:光栅图形或矢量图形
- 矢量图形用一系列过程来描述图像:画一条线,起点是(x1,y1),终点是(x2,y2);画一个圆圈,圆心在(x3,x4),半径是r。这意味着它们可以被“无限地”放大;不会丢失细节。最有用的矢量图形格式是pdf和svg
- 光栅图以像素阵列形式存储,具有固定的最优观测大小。最有用的光栅图形格式是png
除非有确切的理由,一般来说会使用矢量图形:它们大部分情况下有着更好的效果。使用光栅图形有以下两大原因
- 图像(例如,散点图)有成千上万个图形对象(例如,点)。矢量版本会很大,而且它的渲染速度会很慢
- 在微软Office里嵌入图形。微软对矢量图形的支持比较差(除了它们自己的DrawingXML格式,而现阶段R很难生成这种格式),因而光栅图形比较适合这种情况
有两种方法来保存ggplot2的输出。可以用R的标准做法:打开一个图形设备,生成图像,然后关闭设备
pdf("output.pdf", width = 6, height = 6)
ggplot(mpg, aes(displ, cty)) + geom_point()
dev.off()
以上方法适用于所有软件包,不过比较繁琐。ggplot2提供了一个方便的ggsave()
ggplot(mpg, aes(displ, cty)) + geom_point()
ggasve("output.pdf")
ggsave()是为了图像交互而优化过的函数,可以在绘制图像之后使用它
它有以下重要参数
- 第一个参数path指定了图片的存储路径。它会根据文件扩展名自动选择正确的图形设备。ggsave()支持这些类型:.eps .pdf .svg .wmf .png .jpg .bmp .tiff
- width和height控制输出大小,单位是英寸。如果不设定它们,它们会使用当前屏幕图形设备的尺寸
- 对于光栅图形(如.png和.jpg等),dpi参数控制图像的分辨率,默认值为300,适合大部分打印设备,不过可以修改为600,用于高分辨率输出,或者修改为72,用于屏幕(如网页)的展示