【问题标题】:using mfrow in R : how do you give each subplot a different y-label and the x-axis one label在 R 中使用 mfrow:你如何给每个子图一个不同的 y 标签和 x 轴一个标签
【发布时间】:2020-01-21 19:07:01
【问题描述】:

我在 R 中工作,我必须制作许多箱线图。这是组差异的可视化。我想将 x 轴重新标记为只有一个标题而不是五个(每个子图一个)。我最大的问题是我还希望所有子图的 y 轴具有不同的标签。

这是我迄今为止尝试过的:

par(mfrow=c(1,5))
lapply(NEW8[,c("gawayf",    "humf", "sgamesf",  "swtoyf",   "kissf")],
       function(x) boxplot(x ~ NEW8$PAPA_p4_adhd,col=rainbow(2),
                           names=c("CN","ADHD"),
                           ylab=c("gawayf", "humf", "sgamesf",  "swtoyf",   "kissf")))

所有的 y 标签都添加到每个子图中,因此每个子图有 5 行 y 轴标签(gawayf、humf、sgamef、swtoyf、kissf),每个图都说明了用于创建箱线图的数据(@ 987654324@)。 我希望每个图只有相应的 y 轴标签,而 x 轴对于所有五个图都有 1 个标签。

这是我当前的输出:

非常感谢

【问题讨论】:

  • 那么你的五个图中只有一个应该有 x 轴标签?试试这个:使用Map(function(x, i) { your_code_here; }, NEW8[,c(...)], 1:5),并在你的函数中包含xlab = if (i==1) labelhere else NULL
  • 这里有一个例子。 stackoverflow.com/questions/58017055/… 每个绘图都有不同的 xlab,但对 ylab 的工作原理相同。

标签: r plot visualization lapply boxplot


【解决方案1】:

而不是lapply 尝试mapply - 这将允许将不同的参数传递给每个函数调用:

par(mfrow=c(1,5))
myBox <- function(x, y, ...) boxplot(x ~ y, col=rainbow(2), names=c("CN", "ADHA"), ...)
mapply(myBox,
       x    = NEW8[,c("gawayf",    "humf", "sgamesf",  "swtoyf",   "kissf")],
       y    = list(NEW8$PAPA_p4_adhd),  # we make this a list so it has length(1)
       ylab = c("gawayf", "humf", "sgamesf",  "swtoyf",   "kissf"),
       xlab = ""  # empty x-lab
       )

对于 x-lab,您将不得不做一个技巧 - 开始一个新的空图,覆盖所有图,并且只添加 x 轴:

par(fig=c(0,1,0,1), oma=c(0,0,0,0), mar=par("mar"), new=TRUE)
plot.new()
title(xlab="my x-axis")

注意:我没有尝试自己运行此代码,如果这里有任何问题 - 请留下评论并尝试解决它。​​

【讨论】:

  • 它没用 我收到此错误:(函数(x,y)中的错误:未使用的参数(ylab = dots[[3]][[1]],xlab = dots[[4] ][[1]])
  • 谢谢,经过几次修改后,mapply 工作正常。以下脚本有效: par(mfrow=c(1,5)) myBox
  • @Lyly 很高兴听到它现在有效!要将此问题正确标记为“已解决” - 请考虑通过单击“接受”复选标记来接受答案。
猜你喜欢
  • 2023-01-05
  • 1970-01-01
  • 2020-07-08
  • 2020-09-22
  • 1970-01-01
  • 2012-04-26
  • 2019-05-09
  • 1970-01-01
  • 2017-07-30
相关资源
最近更新 更多