【问题标题】:R lattice plot - add outer margin, add text to the margin and move main titles downR lattice plot - 添加外边距,将文本添加到边距并向下移动主要标题
【发布时间】:2021-07-17 07:23:01
【问题描述】:

几年前,我发布了一个关于如何使用建议的解决方案here 为 R 格点图添加标题的问题。但是,我想知道现在是否有一种方法可以使用 lattice 添加外边距,然后将文本添加到边距。下面是一些示例代码,我希望在输出绘图页面的顶部有标题“虹膜直方图”。我还想知道是否有办法将每个图上的主标题向下移动到更靠近直方图的位置?

tmp <- "Iris_Hsit.jpg"

jpeg(filename = tmp, width = 20,  height = 20 , units = "cm", 
     pointsize = 5,bg = "white",  res = 600, quality = 75)

pdd <-2
lattice.options(
  layout.heights = list(bottom.padding =list(x = pdd), top.padding = list(x = pdd)),
  layout.widths = list(left.padding = list(x = pdd), right.padding = list(x = pdd))
)

for(i in 1:4){  
  tmp <- histogram(~iris[ ,i], data = iris, aspect = 1, 
                   main = list(names(iris)[i], cex = 2),
                   xlab = list(names(iris)[i]))
  if(i <= 2){
   plot(tmp, split = c(1, i, 2, 2), more = TRUE)
  }else{
    j <- i - 2  
    plot(tmp, split = c(2, j, 2, 2), more = TRUE)
  }
}

dev.off()

【问题讨论】:

  • 我不太确定你想要什么;只是再次添加标题吗?现在有很多工具可以组合grid 包生成的图。我仍然使用gridExtra。这是你想要的吗?将绘图存储在列表中:lst &lt;- lapply(1:4, function(i) { histogram(~iris[ ,i], data = iris, aspect = 1, main = list(names(iris)[i], cex = 2), xlab = list(names(iris)[i])) })。然后结合并绘制:gridExtra::grid.arrange(grobs=lst, as.table=FALSE, top=grid::textGrob("Iris Histograms", gp=gpar(cex=2)))
  • ...刚刚注意到你的最后一句话。你可以使用par.settings移动东西;这显示了一些可以更改的东西par.settings=list( par.main.text = list(x=grid::unit(0.5, "npc"), y=grid::unit(0, "cm"), col="red", fontsize=20))
  • 感谢您的回复。我希望 lattice 已经发展到能够像基本图形中的“oma”参数一样设置绘图的外边距。也希望有一些沿着 mtext 行的东西,它有一个外边距打开。看来我必须升级我的技能才能理解 gridExtra。
  • 好的,谢谢马克。考虑到它作为推荐包的状态,我认为 lattice 功能不会有太大变化。虽然 lattice 确实具有一些更改边距的功能(正如您在填充中发现的那样),但您始终可以在事后使用较低级别的网格功能(在基本 r 图中无法做到)或组合/添加 grobs 来改变这些东西以获得额外的空间或文字。这就是我使用 gridExtra 的目的,因为它可以减轻一些痛苦。

标签: r lattice


【解决方案1】:

使用 latticeExtra 中的 c.trellis 我们可以做到这一点:

library(latticeExtra)

do.call(c, lapply(iris[1:4], histogram, main = "Iris", xlab = ""))

给予:

或 xyplot.list 也使用 latticeExtra 并提供相同的输出:

xyplot.list(iris[1:4], FUN = histogram, main = "Iris", xlab = "", y.same = FALSE)

对于普通格子本身也可以这样做:

histogram(~ values | ind, stack(iris[1:4]), main = "Iris", xlab = "")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-30
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    相关资源
    最近更新 更多