【问题标题】:How to do a tile plot of a specialised plotting function from package如何从包中绘制专用绘图功能的平铺图
【发布时间】:2013-10-18 10:33:46
【问题描述】:

我想将以下图中的 4 个绘制为 par(mfrow=c(2,2)) 类型排列。

install.packages("wavelets")
require(wavelets)
dat <- rnorm(100)
plot.modwt(modwt(dat)) #4 of these in a 2x2 grid is desired

但是,基于layoutmfrow 的尝试没有成功。

我会给正确答案一个赏金。

【问题讨论】:

  • 该特定情节的问题在于它已经嵌入了对layout 的调用,因此任何尝试都将被覆盖。函数源码见这个sn-p:... if (plot.X) { nf &lt;- layout(matrix(c(2, 2, 1, 1), 2, 2, byrow = TRUE), c(1, 2), c(2, 1), TRUE) ...

标签: r layout plot tiles par


【解决方案1】:

正如@plannapus 评论的那样,函数plot.modwt 已经调用了布局。因此,您将需要更改原始功能。

  1. 如果您在 R 控制台中键入 plot.modwt,您将获得完整的定义。
  2. 复制此函数并将其另存为新函数,例如my.plot.modwt
  3. 注释掉这个函数中的布局行
  4. 设置您的新布局。这对我有用:

    nf = layout(matrix(c(3, 1, 4, 2, 7, 5,8, 6), 4, 2, byrow = TRUE), 
         c(2,2), c(2,1, 2, 1), TRUE)
    layout.show(nf)
    
  5. 调用您的函数(4 次)来创建绘图:

    my.plot.modwt(modwt(dat1))
    my.plot.modwt(modwt(dat2))
    my.plot.modwt(modwt(dat3))
    my.plot.modwt(modwt(dat4))
    

请注意,可能需要对布局进行一些其他更改。


我的代码:

y.plot.modwt = function (x, levels = NULL, draw.boundary = FALSE, type = "stack", 
          col.plot = "black", col.boundary = "red", X.xtick.at = NULL, 
          X.ytick.at = NULL, Stack.xtick.at = NULL, Stack.ytick.at = NULL, 
          X.xlab = "t", y.rlabs = TRUE, plot.X = TRUE, plot.W = TRUE, 
          plot.V = TRUE, ...) 
{
  stackplot.modwt <- function(x, w.range, v.range, col.plot, 
                              col.boundary, draw.boundary, X.xtick.at, X.ytick.at, 
                              Stack.xtick.at, Stack.ytick.at, X.xlab = "t", plot.X = TRUE) {
    innerplot <- function(x, y, type = "l", xtick.at, ytick.at) {
      if (is.null(xtick.at) == FALSE || is.null(ytick.at) == 
            FALSE) {
        plot(x, y, type = "l", axes = FALSE, frame.plot = TRUE)
        <snip>

if (plot.X) {
      #nf <- layout(matrix(c(2, 2, 1, 1), 2, 2, byrow = TRUE), 
      #             c(1, 2), c(2, 1), TRUE)
      par(mai = c(0.6, 0.4, 0.1, 0.6))

<snip>
}

【讨论】:

  • 它不起作用。右侧只有一个情节,每次连续调用my.plot.modwt
  • @user2763361 它对我有用。我已经写了一个精简版的代码。
  • 我不知道你为什么注释掉layout? 这不是我们应该改变的吗?我是说我用你建议的那一行替换了你注释掉的内容,但它没有用。
  • @user2763361 我明白了。我的解决方案涉及调用该函数四次。
  • 感谢您投入的时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 2016-05-02
相关资源
最近更新 更多