如何在多个绘图中增加plot.gam中的边界线宽度

时间:2020-11-03 01:53:52

标签: r plot width border gam

尊敬的StackOverflow用户

我需要增加多个GAM图的边界线宽度。我尝试使用<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="../css/index.css" /> <link rel="stylesheet" type="text/css" href="../css/signup.css" /> <link rel="stylesheet" type="text/css" href="../css/home.css" /> <script defer src="../js/homeScript.js"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> <title>Document</title> </head> <body> <div class="container"> <div class="item-title"> <h1 id="item-count"></h1> </div> <div class="grid-container" id="container"></div> </div> </body> </html>,但仅在最后一个图中有效。所以我的问题是如何增加每个图形的边界线宽度。

这是我的密码

box(lwd=3)

GAM plot

我也尝试不使用Gam_AF_species <- gam(Species.AF ~ s(SST) + s(SBT, k=3) + s(Salinity) + s(Primary.productivity), data = Data) par(mfrow = c(1,4)) plot.gam(Gam_AF_species, ylab="", xlab="", cex.lab = 1.5, cex.axis= 1.5, cex.main = 3, lwd = 3, lwd.tick = 3) box(lwd=3) ,然后图形将一个接一个地显示出来,并且我确实成功地增加了每个图形的边界线宽度。但是,我需要绘制30多个数字,因此这种方式效率不高。希望您能对我提出建议。谢谢。

1 个答案:

答案 0 :(得分:0)

您将需要分别绘制每个面板;您对box(lwd = 3)的呼叫只会在生成最终剧情之后 发出,因此,它只会影响该最终剧情。

要分别绘制各个面板,我将使用select的{​​{1}}参数来选择要绘制的平滑块。

最简单的方法是创建一个快速包装函数,将您对plot.gam() 的调用和对您想要的plot.gam()的调用组合在一起。

一个包装函数可能看起来像这样

box()

所有选项都是经过硬编码的,甚至是要从中绘制的模型都经过硬编码,并且我们认为作为参数传递的唯一想法是通过传递给{{1}的参数my_plot_fun <- function(smooth) { plot(m, select = smooth, ylab="", xlab="", cex.lab = 1.5, cex.axis= 1.5, cex.main = 3, lwd = 3) box(lwd = 3) } 可以平滑绘制} smooth调用中。

然后,我将使用一个简单的select循环来调用包装函数,以依次绘制每个平滑图形。

这是如何执行此操作的完整示例:

plot.gam()

您可以用for调用代替最后一位,如

library('mgcv')

# simulate some data
set.seed(1)
df <- gamSim(1)

# fit the GAM
m <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = "REML")

# wrapper function for the plot you want
my_plot_fun <- function(smooth) {
  plot(m, select = smooth,
       ylab="", xlab="", cex.lab = 1.5, cex.axis= 1.5, 
       cex.main = 3, lwd = 3)
  box(lwd = 3)
}

# set up the plot to have 1 row and 4 columns
layout(matrix(1:4, ncol = 4))

# loop over the indices 1, 2, 3, 4 to plot each smooth in turn
for (i in seq_len(4)) {
  my_plot_fun(i)
}

# reset the device
layout(1)