1

gridExtra包添加了一组“模式”类,可以让一个人用模式填充矩形。例如,

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)

问题是对角线没有跨面板对齐。也就是说,在第一个面板的底部与第二个面板的顶部相交的地方有一个视觉“中断”:在这一点上,线条没有对齐。这是我要解决的问题。

pattern.offset = c(.2005, 0)我可以通过将参数添加到调用中来消除大部分视觉中断grid.pattern,并确保它仅适用于底部面板。但是这个解决方案并不能一概而论。例如,如果我更改模式(例如,通过使用granularity参数grid.pattern),此解决方案将不起作用。有更通用的解决方法吗?

4

1 回答 1

1

要完成这项工作,您必须负责panel.height设置print.trellis. (要了解原因,请在运行示例代码后尝试调整绘图设备的大小:随着设备和面板的大小发生变化,线条的匹配/不匹配也会发生变化):

## 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)

在此处输入图像描述

于 2012-06-12T23:56:38.347 回答