R levelplot去除外边框(调整图表边界)

5
我正在使用levelplot(lattice)在R中创建相关热图。 我想要在方框之间有边框,但是不要在外面,因为它会干扰绘图边界。 如何从方框中删除外部边框?
以下是我的代码:
levelplot(matrix, border="black", 
          colorkey=list(height=.25, space="right", at=seq(-1, 1, .25), cuts=7), 
          scales=list(y=(list(cex=1)), tck = c(1,0), x=list(cex=1, rot=90)),
          main="Leaf Correlations", xlab="", ylab="", 
          col.regions=scalebluered)

这是它的样子...我不喜欢边缘的双线。 enter image description here 编辑:这里有一个可重现的例子:
data(mtcars)
cars.matrix <- as.matrix(mtcars[c(2:8)])
cars.corr <- cor(cars.matrix)
levelplot(cars.corr, border="black", colorkey=list(height=.25, space="right", 
          at=seq(-1, 1, .25), cuts=7), 
          scales=list(y=(list(cex=1)), tck = c(1,0), x=list(cex=1, rot=90)), 
          xlab="", ylab="")

也许直接移除外部边框会更好?我的格子有点生锈了,但是也许可以尝试一些像 par.settings = list(axis.line = list(lwd = 0) 这样的设置,或者也许可以使用 col = "white" - joran
嗯...这似乎会删除所有行,包括刻度线... - joran
你能否制作一个最小可重现的示例呢? - Josh O'Brien
@JoshO'Brien - 添加了一个示例.. - Paul
谢谢。已添加答案 ;) - Josh O'Brien
2个回答

5

好的,如果有这个问题,解决方法很简单但有点难以理解。

只需使用lattice.options()重置用于因子的axis.padding值,将其从默认值0.6(少量填充)更改为0.5(没有填充),那么您就可以顺利进行了:

lattice.options(axis.padding=list(factor=0.5))

## An example to show that this works
data(mtcars)
cars.matrix <- as.matrix(mtcars[c(2:8)])
cars.corr <- cor(cars.matrix)
levelplot(cars.corr, border="black", colorkey=list(height=.25, space="right", 
          at=seq(-1, 1, .25), cuts=7), 
          scales=list(y=(list(cex=1)), tck = c(1,0), x=list(cex=1, rot=90)), 
          xlab="", ylab="")

enter image description here

为了可能有用的未来参考,我通过快速查看prepanel.default.levelplot()使用的代码找到了答案。(各种prepanel.***函数负责确定每个面板应分配的坐标和最小区域,以便将要绘制到其中的对象都能很好地适应。)

head(prepanel.default.levelplot, 4)

1 function (x, y, subscripts, ...)                    
2 {                                                   
3     pad <- lattice.getOption("axis.padding")$numeric
4     if (length(subscripts) > 0) {  

谢谢!我不确定我是否能够找到解决方法! 同时,我发现corrplot库有一些很好的选项,可能比尝试自定义levelplot更适合我。 使用上面的示例,这也可以让我得到我想要的结果: library(corrplot) corrplot(cars.corr, method="shade", shade.col=NA, tl.col="black", tl.srt=45, addgrid.col="black") - Paul
1
@Paul -- 可以理解,不过我刚刚添加了一些注释,希望能让我选择该选项的思考过程更易于你和其他人复现。 - Josh O'Brien

1
一番挖掘显示出许多par命令可能不会被Lattice包图形所接受。例如,par(bty = 'n') 在此levelplot示例中无法使用

与基本R图形不同,Lattice图形不受par()函数设置的许多选项的影响。要查看可更改的选项,请查看help(xyplot)。通常最容易在高级绘图函数内设置这些选项...您可以编写修改面板呈现方式的函数。

尝试通过Yangchen Lin在此处建议的方法直接将轴颜色传递到图形中:R lattice 3d plot: ticks disappear when changing panel border thickness
axis.line = list(col='transparent')

不知道在这种特定情况下是否有效,但完全消除轴线的选项是 par.settings=list(axis.line=list(col="transparent")) - user1521655

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接