使用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)