使用gridExtra和grid.pattern()跨面板对齐图案
使用gridExtra和grid.pattern()跨面板对齐图案,r,graphics,lattice,R,Graphics,Lattice,gridExtra包添加了一个类“pattern”,可以用模式填充矩形。比如说, library(gridExtra) grid.pattern(pattern = 1) 创建一个填充有对角线的框。我想创建一个面板堆栈,其中每个面板都用这些对角线填充。这很简单: library(lattice); library(gridExtra) examplePlot <- xyplot( 1 ~ 1 | 1:2, panel = function () grid.pattern(pat
gridExtra
包添加了一个类“pattern”,可以用模式填充矩形。比如说,
library(gridExtra)
grid.pattern(pattern = 1)
创建一个填充有对角线的框。我想创建一个面板堆栈,其中每个面板都用这些对角线填充。这很简单:
library(lattice); library(gridExtra)
examplePlot <- xyplot(
1 ~ 1 | 1:2,
panel = function () grid.pattern(pattern = 1),
layout = c(1, 2),
# Remove distracting visual detail
scales = list(x=list(draw=FALSE), y=list(draw=FALSE)),
strip = FALSE, xlab = '', ylab = ''
)
print(examplePlot)
library(lattice);图书馆(gridExtra)
examplePlot要实现此功能,您必须负责设置print.Grillis
使用的panel.height
参数。(要了解原因,请在运行示例代码后尝试调整打印设备的大小:随着设备和面板大小的变化,线的匹配/不匹配也会发生变化):
##计算45度对角线之间的垂直距离(单位:mm)
##间隔5mm(网格图案的默认距离)。
vdist要实现此功能,您必须负责设置print.grills
使用的panel.height
参数。(要了解原因,请在运行示例代码后尝试调整打印设备的大小:随着设备和面板大小的变化,线的匹配/不匹配也会发生变化):
##计算45度对角线之间的垂直距离(单位:mm)
##间隔5mm(网格图案的默认距离)。
vdist我认为如果不改变自己的patternGrob
的(高度实验性的)实现,就没有一个简单的答案。你能描述一下你问题的一般背景吗?你想做什么?可能有一种更简单的方法可以不用使用这个不可靠的功能来完成。谢谢您的回复。实际上,我所要做的就是用模式填充面板,并确保模式在面板之间无缝排列。例如,请参见下面回答中的图。我认为如果不改变patternGrob
的(高度实验性的)实现,就没有一个简单的答案。你能描述一下你问题的一般背景吗?你想做什么?可能有一种更简单的方法可以不用使用这个不可靠的功能来完成。谢谢您的回复。实际上,我所要做的就是用模式填充面板,并确保模式在面板之间无缝排列。例如,请参见下面响应中的图。谢谢您--此解决方案有效。但这似乎意味着,如果45度对角线要跨面板对齐,面板必须至少为5*sqrt(2)=7.071mm高。正确吗?@user697473——如果使用默认的行间宽度(或“粒度”)5mm,则正确。如果您更改了粒度(如中所示),并且面板高度一致,则可以得到不同高度的面板。谢谢您,这个解决方案很有效。但这似乎意味着,如果45度对角线要跨面板对齐,面板必须至少为5*sqrt(2)=7.071mm高。正确吗?@user697473——如果使用默认的行间宽度(或“粒度”)5mm,则正确。如果更改了粒度(如中所示),并且面板高度一致,则可以得到不同高度的面板。
## Calculate vertical distance (in mm) between 45 degree diagonal lines
## spaced 5mm apart (the default distance for grid.pattern).
vdist <- 5 * sqrt(2)
nLines <- 8L ## can be any integer
panelHeight <- list(x = nLines*vdist, units = "mm", data = NULL)
## Plot it
print(examplePlot, panel.height=panelHeight)