Introduction

grid包是一个底层的绘图系统,能够灵活地控制图形输出的外观和布局,它能把图形逐个地添加到画布中设定好的位置上去。grid包不仅可以输出图形,还可以产生图形组件并复用和重组,形成复杂图形,也是lattice 和 ggplot2 的基础系统,理论上来讲能够完成一切可视化方案。 由于lattice 和 ggplot2 是基于grid 开发的,所以了解grid 系统有利于实现更灵活多变的可视化方案。

start a new page

All grid output occurs relative to the current viewport (region) on a page. In order to start a new page of output, the user must call the grid.newpage() function.

Create a Grid Viewport

viewport是grid包的核心对象和基础,即画布中的一个矩形的绘图区域,可通过viewport()函数新建窗口对象。

参数注释:

x:x坐标相对整个窗口x轴位置

y:y坐标中心相对整个窗口y轴位置

just:x和y所指的位置,默认为矩形中心位置

plotViewport()

dataViewport()

换句话说:通过这三个参数即可设定可视化窗口。

library(grid)

library(ggplot2)

####

grid.newpage()

grid.show.viewport(viewport(x = 0.5, y = 0.5, width = 0.5,height = 0.5))

####

grid.newpage()

vp1 <- viewport(x = 0.5, y = 0.5, width = 0.5, height = 0.5)

plot1 <- ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width)) +

geom_point(aes(colour = Species))

print(plot1, vp = vp1)

image.png

####

grid.newpage()

grid.show.viewport(viewport(x=0.5, y= 0.5, width = 0.5, height=0.5, just = c("left","bottom")))

image.png

####

grid.newpage()

vp2 <- viewport(x = 0.5, y = 0.5, width = 0.5, height = 0.5, just = c("left","bottom"))

print(plot1, vp = vp2)

image.png

viewport layout

layout:申明对目前画布进行拆分 layout.pos.row;layout.pos.col:可视化实现的位置,一般与grid.layout() 参数有关。

library(grid)

library(ggplot2)

####

plot <- ggplot(data = iris, aes(x = Sepal.Length,

y = Sepal.Width)) +

geom_point(aes(colour = Species)) +

theme(legend.position=c(0.8,0.7))

####

grid.newpage()

pushViewport(viewport(layout = grid.layout(4, 4)))

print(plot, vp = viewport(layout.pos.row = 3:4, layout.pos.col = 1:2))

print(plot, vp = viewport(layout.pos.row = 1, layout.pos.col = 1:2))

print(plot, vp = viewport(layout.pos.row = 1:2, layout.pos.col = 3:4))

image.png

viewport tree

Grid同样能够通过树状结构管理矩形区域。 * pushViewport():将指定的矩形区域插入为当前画布的子节点,同时画布转移为刚插入的viewport。 * upViewport():当前viewport移动到父节点; * downViewport():当前viewport移动到指定name的子节点;

library(grid)

library(ggplot2)

grid.newpage()

####

vp1 <- viewport(x = 0.5, y = 0.5, width = 0.5, height = 0.5)

pushViewport(vp1)

plot <- ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width)) +

geom_point(aes(colour = Species))

print(plot , newpage = F)

upViewport() #返回父节点

####

vp2 <- viewport(x = 0.5, y = 0.5, width = 0.5, height = 0.5, just = c("left","bottom"))

pushViewport(vp2)

print(plot , newpage = F)

image.png

vpTree

可以利用vpTree提前规划作图矩形区域,以便进行分区域可视化。 * seekViewport():搜索指定name的viewport,将其设置为当前画布。 * popViewport():删除当前viewport,同时转移画布为其的父节点; ** vpList 里面的所有viewport 的等级是平行的,而vpStack中的是按输入viewport 的顺序 树状排列。**

####

library(grid)

library(ggplot2)

grid.newpage()

# set up viewport

vp1 <- viewport(x = 0.5, y = 0.5, width = 0.5, height = 0.5,

name = "vp1")

vp2 <- viewport(x = 0.5, y = 0.5, width = 0.5, height = 0.5,

just = c("left","bottom"), name = "vp2")

vp3 <- viewport(x = 0.5, y = 0.5, width = 0.5, height = 0.5,

just = c("right","top"), name = "vp3")

# 规划矩形区域: vp为第一层, vp1-3并列为第二层

tree <- vpTree(viewport(x = 0.5, y = 0.5, width = 1, height = 1,

name = "vp"),

vpList(vp1, vp2, vp3))

# push

pushViewport(tree)

plot <- ggplot(data = iris, aes(x = Sepal.Length,

y = Sepal.Width)) +

geom_point(aes(colour = Species)) +

theme(legend.position=c(0.8,0.7))

seekViewport("vp")

print(plot, newpage = FALSE)

seekViewport("vp1")

print(plot, newpage = FALSE)

seekViewport("vp2")

print(plot, newpage = FALSE)

seekViewport("vp3")

print(plot, newpage = FALSE)

image.png

geom

以grid.XX 格式出现的相关函数,基本和ggplot2 中geom_格式的函数相似,一般用于图形变换。

grid.rect(...)

grid.lines(...)

grid.polygon(...)

grid.circle(...)

grid.text(...)

Grob

与grid.XX 一样,但Grob 对象不会输出可视化结果,而是创建可以复用和重组的图形组件。 可用grid.draw() 显示相应组件,而grid.edit 可用于修改相应组件。

有的包如ggplot2 只是在作图ing时,才会产生grid 组件,因此可以先进行可视化,然后通过grid.force() 强制产生组件,然后用grid.ls()查看组件然后修改。其实没太大意义,首先是ggplot2 图形界面修改链接已经非常多了。而且其输出对象非常复杂,如不是特殊必要(写包),可能没必要去阅读那些组件。

####

library(grid)

library(ggplot2)

####

grid.newpage()

my_rect <- rectGrob(name = "my_rect", x = 0.5,

y = 0.5, width = 0.8, height = 0.3)

grid.draw(my_rect)

image.png

grid.edit("my_rect", gp = gpar(col = "red", lty = 1))

image.png

####

grid.newpage()

plot <- ggplot(data = iris, aes(x = Sepal.Length,

y = Sepal.Width)) +

geom_point(aes(colour = Species))

plot

grid.force()

image.png

grid.ls()

## layout

## background.1-11-12-1

## panel.7-5-7-5

## grill.gTree.743

## panel.background..rect.734

## panel.grid.minor.y..polyline.736

## panel.grid.minor.x..polyline.738

## panel.grid.major.y..polyline.740

## panel.grid.major.x..polyline.742

## NULL

## geom_point.points.730

## NULL

## panel.border..zeroGrob.731

## spacer.8-6-8-6

## spacer.8-4-8-4

## spacer.6-6-6-6

## spacer.6-4-6-4

## axis-t.6-5-6-5

## axis-l.7-4-7-4

## NULL

## axis

## axis.1-1-1-1

## GRID.text.750

## axis.1-2-1-2

## axis-r.7-6-7-6

## axis-b.8-5-8-5

## NULL

## axis

## axis.1-1-1-1

## axis.2-1-2-1

## GRID.text.746

## xlab-t.5-5-5-5

## xlab-b.9-5-9-5

## GRID.text.754

## ylab-l.7-3-7-3

## GRID.text.757

## ylab-r.7-7-7-7

## guide-box.7-9-7-9

## legend.box.background.2-4-4-2

## guides.3-3-3-3

## background.1-6-7-1

## title.2-5-2-2

## guide.title.titleGrob.762

## GRID.text.760

## key-3-1-bg.4-2-4-2

## key-3-1-1.4-2-4-2

## key-4-1-bg.5-2-5-2

## key-4-1-1.5-2-5-2

## key-5-1-bg.6-2-6-2

## key-5-1-1.6-2-6-2

## label-3-3.4-4-4-4

## guide.label.titleGrob.765

## GRID.text.763

## label-4-3.5-4-5-4

## guide.label.titleGrob.768

## GRID.text.766

## label-5-3.6-4-6-4

## guide.label.titleGrob.771

## GRID.text.769

## subtitle.4-5-4-5

## title.3-5-3-5

## caption.10-5-10-5

## tag.2-2-2-2

# grid.edit("geom_point.points.2855",

# gp = gpar(col = c("white","red", "navy")))

# point 后缀数字一直在改变。。。

gpar

gpar() 和基础绘图函数par()一样,用于创建图形参数对象,例如:外框颜色、填充颜色、透明度、线段类型、线段宽度等。

gp <- get.gpar() # 获取现存gpar参数

utils::str(gp) # 整齐输出gpar参数

col Colour for lines and borders.

fill Colour for filling rectangles, polygons, …

alpha Alpha channel for transparency

lty Line type

lwd Line width

lex Multiplier applied to line width

lineend Line end style (round, butt, square)

linejoin Line join style (round, mitre, bevel)

linemitre Line mitre limit (number greater than 1)

fontsize The size of text (in points)

cex Multiplier applied to fontsize

fontfamily The font family

fontface The font face (bold, italic, …)

lineheight The height of a line as a multiple of the size of text

font Font face (alias for fontface; for backward compatibility)

gTree

利用gTree 的可以灵活的构建复杂的gpar 组件,其中一般是就近原则,靠近谁就用谁的参数,可以用grid包自带的函数进行说明:

####

library(grid)

####

grid.newpage()

vp <- viewport(w = .8, h = .8, gp = gpar(col="blue"))

pushViewport(vp) #push viewport

gp <- get.gpar() # 获取现存gpar参数

utils::str(gp) # 整齐输出gpar参数

## List of 14

## $ fill : chr "white"

## $ col : chr "blue"

## $ lty : chr "solid"

## $ lwd : num 1

## $ cex : num 1

## $ fontsize : num 12

## $ lineheight: num 1.2

## $ font : int 1

## $ fontfamily: chr ""

## $ alpha : num 1

## $ lineend : chr "round"

## $ linejoin : chr "round"

## $ linemitre : num 10

## $ lex : num 1

## - attr(*, "class")= chr "gpar"

grid.text("This text is the colour set by the viewport (blue)",

y = 1, just = c("center", "bottom"),

gp = gpar(fontsize = 20), vp = vp)

# viewport = vp, 表现与vp中的gpar参数想同

####

grid.draw(gTree(children = gList(rectGrob(gp = gpar(col="red")),

textGrob(paste("The rect is its own colour (red)",

"but this text is the colour",

"set by the gTree (green)",

sep = "\n"))),

gp = gpar(col = "green"), vp = vp))

image.png

gp <- get.gpar() # 获取现存gpar参数

utils::str(gp) # 整齐输出gpar参数

## List of 14

## $ fill : chr "white"

## $ col : chr "blue"

## $ lty : chr "solid"

## $ lwd : num 1

## $ cex : num 1

## $ fontsize : num 12

## $ lineheight: num 1.2

## $ font : int 1

## $ fontfamily: chr ""

## $ alpha : num 1

## $ lineend : chr "round"

## $ linejoin : chr "round"

## $ linemitre : num 10

## $ lex : num 1

## - attr(*, "class")= chr "gpar"

我们可以看到现存图形界面中的gpar是没有改变的,但:

grid.text 以vp 中的gpar 参数为基础

rectGrob 以自带的gpar 参数构建

textGrob 以gTree 设定的 gpar 构建

more

package document

gridExtra CRAN page

top
Copyright © 2088 世界杯四强_世界杯裁判 - tylwn.com All Rights Reserved.
友情链接